我有一个select语句返回给我5列(并且需要1-2分钟) 其中一列是颜色(即只有三种颜色红色,蓝色和黄色)。现在我想在同一个选择语句中显示具有红色的行数,具有蓝色的行数和具有黄色的行数。在相同的select语句中的聚合查询
Select语句是这个
,我想这样的
任何帮助输出?
我有一个select语句返回给我5列(并且需要1-2分钟) 其中一列是颜色(即只有三种颜色红色,蓝色和黄色)。现在我想在同一个选择语句中显示具有红色的行数,具有蓝色的行数和具有黄色的行数。在相同的select语句中的聚合查询
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
是啊!我也做过同样的事情,并对拉马克邮报发表评论。但是,谢谢。 +1提到..我相信别人也会从这个查询中学到 – Zerotoinfinity 2012-02-08 18:57:35
我以前错过了2行。现在更正:) – 2012-02-08 19:18:07
1-2分钟?它使用了多少个表和行?如果您将SQL语句添加到您的文章中,这将帮助我们帮助您。 – 2012-02-08 18:36:18