Как использовать предложение PIVOT над пустыми значениями - PullRequest
2 голосов
/ 12 октября 2011

Пример данных:

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

Проблема, с которой я сталкиваюсь, связана с пустыми значениями в поле местоположения. Я не знаю, как представлять пустые значения местоположения в сводном запросе.

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 & 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. 

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Как насчет просто поменять местами пустые / пустые значения для фиктивного значения?Так что измените

select type, location from table1

на

select type, CASE WHEN location is null THEN 'ZZ' ELSE location END as location from table1

Тогда в столбце будет zz или любое фиктивное значение, выбранное вами

1 голос
/ 12 октября 2011

Вы можете просто отказаться от 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
...