Создайте таблицу чисел - ее определение может незначительно отличаться в зависимости от платформы (это для SQL Server):
CREATE TABLE Numbers(Number INT PRIMARY KEY);
INSERT Numbers
SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY name)
FROM sys.all_columns;
Теперь этот temp также является SQL Server, но демонстрирует синтаксис соединения, который должен быть действительным по указанным вами СУБД (хотя, признаюсь, я их не использую, поэтому не могу проверить):
DECLARE @foo TABLE(value VARCHAR(32), [count] INT);
INSERT @foo SELECT 'foo', 1
UNION ALL SELECT 'bar', 3
UNION ALL SELECT 'baz', 2;
SELECT f.value, f.[count], [index] = n.Number
FROM @foo AS f, Numbers AS n
WHERE n.Number <= f.[count];
Результаты (опять же, SQL Server):
value | count | index
------+-------+------
foo | 1 | 1
bar | 3 | 1
bar | 3 | 2
bar | 3 | 3
baz | 2 | 1
baz | 2 | 2
Поскольку вам нужна спецификация, вот она (из §15.25 Условный оператор?: , последнее предложение раздела):
Операнд невыбранное выражение не оценивается для этой конкретной оценки условного выражения.
Нет, не могло. Это то же самое, что:
Integer test = null;
if ( test != null ) {
test = test.intValue();
}
else {
test = 0;
}