1

我有一个选择语句,它返回 5 列(这需要 1-2 分钟),其中一列是颜色(即只有红色、蓝色和黄色三种颜色)。现在我想在同一个 select 语句中显示红色的行数、蓝色的行数和黄色的行数。

选择语句是这个

在此处输入图像描述

我想要这样的输出

在此处输入图像描述

有什么帮助吗?

4

2 回答 2

1

你想要这个(对于 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
于 2012-02-08T18:38:39.087 回答
1

使用 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
于 2012-02-08T18:55:25.433 回答