我有一个Work
用两列命名的表 -Name
和Status
:
SELECT Name,Status FROM Work
--------+----------
Name |Status
--------+----------
MyBJE |2
MyBJE_2 |9
MyBJE |8
MyBJE_2 |9
MyBJE |7
MyBJE_2 |9
MyBJE |2
MyBJE |8
MyBJE_2 |3
MyBJE |8
MyBJE |8
MyBJE_2 |1
MyBJE_2 |8
MyBJE |4
我试图弄清楚如何编写一个查询,该查询将从上述数据中返回以下结果:
--------+-------+-------+-------
Name |COUNT_2|COUNT_3|COUNT_4
--------+-------+-------+-------
MyBJE |2 |0 |1
MyBJE_2 |0 |1 |0
预期的语义如下:
- 忽略所有 Status 不是 2、3 或 4 的条目
- 对于每个给定的名称计数 2、3 和 4 的出现,并在专用列中显示总计数。
- 如果 Name 没有任何 Status 为 2、3 或 4 的条目,请确保该 Name确实出现在结果中,并且每个 COUNT_X 列中的值为 0。
这是我到目前为止所做的(数据取自真实数据库,而不是上面的示例)。
SELECT Name, Status, COUNT(1)
FROM (SELECT Name, (CASE when Status IN (2,3,4) then Status else 0 end) as Status FROM Work) x
GROUP BY Name, Status
--------+------+----------------
Name |Status|(No column name)
--------+------+----------------
MyBJE_2 |0 |262
MyBJE_2 |2 |1033
MyBJE |0 |2496
现在我知道我应该使用 PIVOT 语句,但我就是不知道如何使用。