0

我有一个Work用两列命名的表 -NameStatus

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

预期的语义如下:

  1. 忽略所有 Status 不是 2、3 或 4 的条目
  2. 对于每个给定的名称计数 2、3 和 4 的出现,并在专用列中显示总计数。
  3. 如果 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 语句,但我就是不知道如何使用。

4

2 回答 2

1
Select   name,
         sum(case when status=2 then 1 else 0 end) as Count_2,
         sum(case when status=3 then 1 else 0 end) as Count_3,
         sum(case when status=4 then 1 else 0 end) as Count_4
from     work
group by name
于 2013-08-02T19:59:55.123 回答
0
select Name,sum(Case when Status=2 then 1 Else 0 End) Count_2,sum(Case when Status=3 then 1 Else 0 End) Count_3,
sum(Case when Status=4 then 1 Else 0 End) Count_3
From tableName
where Status in(2,3,4)
Group By Name
于 2013-08-02T19:57:48.600 回答