Формирование данных заблаговременно упрощает вещи для разработчика приложений, особенно если все, что они делают, это отображают статический отчет без интерактивного редактирования, сортировки или подкачки страниц - довольно распространенное явление.
Решение Ливена (отличительный выбор столбцов при вставке нулей для других столбцов, а затем проверка нулей других столбцов) - единственное решение, которое действительно работает. Вид.
data1 NULL NULL
NULL 123 2011-05-24 19:42:29.577
NULL 124 2011-05-24 19:42:29.577
data2 NULL NULL
NULL 323 2011-05-24 19:42:29.577
NULL 333 2011-05-24 19:42:29.577
NULL 444 2011-05-24 19:42:29.577
NULL 673 2011-05-24 19:42:29.577
- если в столбце, который вы обнуляете, уже нет нулей, в этом случае мы возвращаемся к квадрату 0. Добавьте еще одну строку.
INSERT INTO @Table VALUES ('data2', NULL, getdate())
Теперь снова запустите запрос. Облом чувак.
data1 NULL NULL
NULL 123 2011-05-24 19:53:36.437
NULL 124 2011-05-24 19:53:36.437
data2 NULL NULL
data2 NULL 2011-05-24 19:53:36.440
NULL 323 2011-05-24 19:53:36.440
NULL 333 2011-05-24 19:53:36.440
NULL 444 2011-05-24 19:53:36.440
Предлагаемое ROX решение ROLLUP вообще не работает, по крайней мере, в SQL Server. На самом деле, все становится еще хуже.
data1 NULL NULL
data1 NULL NULL
data1 NULL NULL
data1 123 2011-05-24 20:16:26.693
data1 124 2011-05-24 20:16:26.693
data2 NULL NULL
data2 NULL NULL
data2 NULL NULL
data2 323 2011-05-24 20:16:26.693
data2 333 2011-05-24 20:16:26.693
data2 444 2011-05-24 20:16:26.693
data2 673 2011-05-24 20:16:26.693
Решение POWș ROWNUM может работать в Oracle (я не пробовал его и, похоже, отсутствуют начальные скобки), но эквивалентный код SQL Server с использованием ROW_NUMBER () OVER определенно не работает ни на что не годится - тоже как мой грамматик и правописание.
SELECT
ROW_NUMBER() OVER(ORDER BY [name]) AS [rown]
, name
, ''
, ''
FROM @Table
GROUP BY name
UNION ALL
SELECT ROW_NUMBER() OVER(ORDER BY [name]) + 1 AS [rown] , name, size, date
FROM @Table
производит
data1 NULL NULL
data1 NULL NULL
data1 NULL NULL
data1 123 2011-05-24 20:16:26.693
data1 124 2011-05-24 20:16:26.693
data2 NULL NULL
data2 NULL NULL
data2 NULL NULL
data2 323 2011-05-24 20:16:26.693
data2 333 2011-05-24 20:16:26.693
data2 444 2011-05-24 20:16:26.693
data2 673 2011-05-24 20:16:26.693
Как профессионал в области программного обеспечения, ваша задача - обеспечить, чтобы миллиарды единиц и нулей располагались в нужном месте, в нужном порядке и в нужное время. Вы знаете, детали, часто до отдельных битов, важны.
Половина обширного ответа хуже, чем вообще никакого ответа, потому что он тратит время каждого. Так что ... не обижайте, потому что намерения хорошие, но, по крайней мере, протестируйте свое "решение", прежде чем публиковать его как "решение".
Я был бы идеален, если бы не был так чертовски скромен. И даже я проверяю.