Sql server 2005 SQL计数问题
我正在制作一份工作报告,其中包括5列,都包含v1aa、v1ab和v1ac 我想做的是计算5列中的所有v1aa并显示结果(v1ab和v1ac也是如此) 下面是我希望显示的示例:-Sql server 2005 SQL计数问题,sql-server-2005,tsql,Sql Server 2005,Tsql,我正在制作一份工作报告,其中包括5列,都包含v1aa、v1ab和v1ac 我想做的是计算5列中的所有v1aa并显示结果(v1ab和v1ac也是如此) 下面是我希望显示的示例:- Amber = 3 (v1aa code) Blue = 2 (v1ab code) Red = 1 (v1ac code) 有谁能给我一些如何开始的建议吗?我需要查看数据才能确定,但听起来像是一个问题。这就是你要找的吗 SELECT SUM((CASE WHEN Column1 = 'v1aa' THEN
Amber = 3 (v1aa code)
Blue = 2 (v1ab code)
Red = 1 (v1ac code)
有谁能给我一些如何开始的建议吗?我需要查看数据才能确定,但听起来像是一个问题。这就是你要找的吗
SELECT
SUM((CASE WHEN Column1 = 'v1aa' THEN 1 ELSE 0 END)
+ (CASE WHEN Column2 = 'v1aa' THEN 1 ELSE 0 END)
+ (CASE WHEN Column3 = 'v1aa' THEN 1 ELSE 0 END)
+ (CASE WHEN Column4 = 'v1aa' THEN 1 ELSE 0 END)
+ (CASE WHEN Column5 = 'v1aa' THEN 1 ELSE 0 END))
AS Amber,
SUM((CASE WHEN Column1 = 'v1ab' THEN 1 ELSE 0 END)
+ (CASE WHEN Column2 = 'v1ab' THEN 1 ELSE 0 END)
+ (CASE WHEN Column3 = 'v1ab' THEN 1 ELSE 0 END)
+ (CASE WHEN Column4 = 'v1ab' THEN 1 ELSE 0 END)
+ (CASE WHEN Column5 = 'v1ab' THEN 1 ELSE 0 END))
AS Blue,
SUM((CASE WHEN Column1 = 'v1ac' THEN 1 ELSE 0 END)
+ (CASE WHEN Column2 = 'v1ac' THEN 1 ELSE 0 END)
+ (CASE WHEN Column3 = 'v1ac' THEN 1 ELSE 0 END)
+ (CASE WHEN Column4 = 'v1ac' THEN 1 ELSE 0 END)
+ (CASE WHEN Column5 = 'v1ac' THEN 1 ELSE 0 END))
AS Red
FROM
dbo.MyTable
我想这会让你开始的。如果可能为空,或者数据中可能存在不希望在报表中显示的其他代码,则可能需要添加WHERE子句
SELECT CASE i.code
WHEN 'v1aa' THEN 'Amber'
WHEN 'v1ab' THEN 'Blue'
WHEN 'v1ac' THEN 'Red' END,
COUNT(*)
FROM
(
SELECT Col1 AS Code FROM Test
UNION ALL SELECT Col2 FROM Test
UNION ALL SELECT Col3 FROM Test
UNION ALL SELECT Col4 FROM Test
UNION ALL SELECT Col5 FROM Test
) i
GROUP BY i.Code
如果要为每条记录计算这些计数,请尝试:
Select
Case When Col1 Like '%v1aa%' Then 1 Else 0 End +
Case When Col2 Like '%v1aa%' Then 1 Else 0 End +
Case When Col3 Like '%v1aa%' Then 1 Else 0 End +
Case When Col4 Like '%v1aa%' Then 1 Else 0 End +
Case When Col5 Like '%v1aa%' Then 1 Else 0 End As AmberCount,
Case When Col1 Like '%v1ab%' Then 1 Else 0 End +
Case When Col2 Like '%v1ab%' Then 1 Else 0 End +
Case When Col3 Like '%v1ab%' Then 1 Else 0 End +
Case When Col4 Like '%v1ab%' Then 1 Else 0 End +
Case When Col5 Like '%v1ab%' Then 1 Else 0 End As BlueCount,
Case When Col1 Like '%v1ac%' Then 1 Else 0 End +
Case When Col2 Like '%v1ac%' Then 1 Else 0 End +
Case When Col3 Like '%v1ac%' Then 1 Else 0 End +
Case When Col4 Like '%v1ac%' Then 1 Else 0 End +
Case When Col5 Like '%v1ac%' Then 1 Else 0 End As RedCount
From MyTable
如果您想要整个表的计数,那么添加一个Sum()聚合函数,正如Timothy Khouri在他的回答中所建议的那样您可以发布一些示例数据吗?