如何在空值上使用PIVOT子句

时间:2011-10-12 09:39:52

标签: sql sql-server tsql pivot

示例数据:

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 个答案:

答案 0 :(得分:2)

如何只是换掉虚拟值的空/空位置。所以改变

select type, location from table1

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

然后该列将是zz或您选择的任何虚拟值

答案 1 :(得分:1)

您可以放弃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