【发布时间】:2015-08-17 22:07:10
【问题描述】:
在 SQL Server 2008 中。
我的东西的组件处于两种状态之一,表格如下所示:
create table Things (
ThingName varchar(10),
ItemNumber INT,
ItemStatus varchar(10));
INSERT INTO Things (
ThingName,
ItemNumber,
ItemStatus)
VALUES
('a', 1, 'red'),
('a', 2, 'red'),
('a', 3, 'blue'),
('b', 1, 'red'),
('b', 2, 'red'),
('b', 3, 'red'),
('b', 4, 'red'),
('c', 1, 'blue'),
('c', 2, 'blue'),
('c', 3, 'red');
我需要的每件事的结果是 1) 项目总数 2) 红色项目总数 3) 蓝色项目总数
结果如下:
ThingName TotalItems RedItems BlueItems
a 3 2 1
b 4 4 0
c 3 1 2
我用来执行此操作的“明显”查询:
SELECT
ThingName,
sum(Red + Blue) as TotalItems,
sum(Red) as RedItems,
sum(Blue) as BlueItems
FROM (
SELECT
ThingName,
case
when ItemStatus = 'red' then count(*)
else 0
end as Red,
case
when ItemStatus = 'blue' then count(*)
else 0
end as Blue
FROM Things
GROUP BY
ThingName,
ItemStatus) a GROUP BY ThingName;
这可行,但看起来很原始且不令人满意。实际上,我似乎看不到如何在不采用两步法的情况下根据需要进行聚合。有什么建议吗?
【问题讨论】:
标签: sql sql-server conditional-aggregation