Я не мог придумать лучшего названия, если кто-то может придумать лучшее, я готов внести предложения.
У меня есть таблица, которая выглядит так:
Source TableName Detail active_status RowCount
a table_one stuff active 500
b table_two stuff_2 active 750
c table_three stuff_3 inactive 1000
d table_four stuff_4 active 200
e table_five stuff_5 inactive 200
Когда я запускаю этот запрос:
select [a], [b], [c], [d], [e]
from (select [source], [rowcount] from ParentStaged) as src_tbl
pivot
(
avg([rowcount])
for source in ([a], [b], [c], [d], [e])
) as pivot_tbl;
Получаю такой результат:
a b c d e
500 750 1000 200 200
Когда я запускаю этот запрос:
select [a], [b], [c], [d], [e]
from (select [source], [TableName], [rowcount] from ParentStaged) as src_tbl
pivot
(
avg([rowcount])
for source in ([a], [b], [c], [d], [e])
) as pivot_tbl;
Я получаю такой результат:
a b c d e
500 null null null null
null 750 null null null
null null 1000 null null
null null null 200 null
null null null null 200
Почему это?
Думаю, я понял почему.
Это не имеет ничего общего с количеством столбцов, которые я добавляю в предложение from, это связано с тем, что я добавляю именно.
Агрегирование выполняет вычисление на основе того, что я говорю ему агрегировать по перечисленным в моем предложении from. Группировка выполняется на основе того, что я не использую в агрегации.
Если я перечисляю столбцы, которые не являются общими для других групп, это вызывает появление нулевых значений.
Если я перечислю общие столбцы, нулевые значения не появятся.
Верный. Во втором запросе PIVOT автоматически группирует записи по
TableName
только потому, что он там есть.