#sql #sql-server #tsql #pivot
#sql #sql-сервер #tsql #сводная
Вопрос:
Пример данных:
Data table1:
prodid type location(there are more columns, just ignoring them for this example)
p001 t1 l1
p002 t1 l2
p003 t3 l1
p004 t2
p005 t1 l1
Need a summary like
type Blank [l1] [l2]
t1 0 2 1
t2 1 0 0
t3 0 1 0
Проблема, с которой я сталкиваюсь, связана с пустыми значениями в поле location . Я не знаю, как представить пустые значения местоположения в сводном запросе.
Pivot query:
1: select type, [] as Blank, [l1], [l2], Blank [l1] [l2] as Total from
2: (select type, location from table1)
3: pivot
4: (count(location) for location in ([],[l1],[l2]) t2
Error on line 1 amp; 4
An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Add a name or single space as the alias name.
Ответ №1:
Как насчет того, чтобы просто поменять местами пустые / пустые места для фиктивного значения. Так что измените
select type, location from table1
Для
select type, CASE WHEN location is null THEN 'ZZ' ELSE location END as location from table1
Тогда столбцом будет zz или любое другое фиктивное значение, которое вы выберете
Комментарии:
1. Я поставил РЕГИСТР, потому что не был уверен, были ли ваши местоположения пустыми строками или действительно нулевыми. Если они равны нулю, вы можете использовать isnull(location, ‘zz’), что, я думаю, должно быть немного более эффективным. Хотя, если у вас нет большого количества данных, вы этого не заметите.
Ответ №2:
Вы могли бы просто отказаться PIVOT
и использовать
SELECT type,
COUNT(CASE
WHEN location = '' THEN 1
END) AS Blank,
COUNT(CASE
WHEN location = 'l1' THEN 1
END) AS l1,
COUNT(CASE
WHEN location = 'l2' THEN 1
END) AS l2,
COUNT(*) AS Total
FROM table1
WHERE location in ('','l1','l2')
GROUP BY type
Комментарии:
1. Спасибо за быстрый ответ, Мартин. В таблице Acutal больше значений местоположения, и они могут меняться. когда я буду знать, как обрабатывать пустые значения, я планировал создать некоторую структуру программы, чтобы получить уникальный список и подготовить сводный sql и запустить, чтобы сделать его динамичным. Я могу сделать то же самое для предлагаемого запроса, но он может затянуться. Есть мысли?