我有一个选择语句,它返回 5 列(这需要 1-2 分钟),其中一列是颜色(即只有红色、蓝色和黄色三种颜色)。现在我想在同一个 select 语句中显示红色的行数、蓝色的行数和黄色的行数。
选择语句是这个
我想要这样的输出
有什么帮助吗?
我有一个选择语句,它返回 5 列(这需要 1-2 分钟),其中一列是颜色(即只有红色、蓝色和黄色三种颜色)。现在我想在同一个 select 语句中显示红色的行数、蓝色的行数和黄色的行数。
选择语句是这个
我想要这样的输出
有什么帮助吗?
你想要这个(对于 SQL Server 2005+):
SELECT *, SUM(CASE WHEN Color = 'RED' THEN 1 ELSE 0 END) OVER() [RED],
SUM(CASE WHEN Color = 'BLUE' THEN 1 ELSE 0 END) OVER() [BLUE],
SUM(CASE WHEN Color = 'Yellow' THEN 1 ELSE 0 END) OVER() [Yellow]
FROM YourTable
使用 CTE(通用表表达式):
;
WITH cte AS
( SELECT ...
... your query here
)
WITH grp AS
( SELECT
color
, COUNT(*) AS cnt
FROM
cte
GROUP BY
color
)
SELECT
cte.*
, (SELECT cnt FROM grp WHERE color = 'Red') AS Red
, (SELECT cnt FROM grp WHERE color = 'Blue') AS Blue
, (SELECT cnt FROM grp WHERE color = 'Yellow') AS Yellow
FROM
cte