我的数据是这样的
Name Values
A Val1
A Val1
A Val2
A Val2
A Val2
B Val1
B Val2
我想以这种方式输出我的数据
Name Val1Count Val2Count
A 2 3
B 1 1
我可以使用此查询获取Val1的名称和计数(*)。
select [Name],count(*) FROM [table1]
where [values]='Val1'
group by [Name]
但我不知道如何在同一行中得到val2的计数(*)。
我尝试过这样做,但看起来不支持
select [name],@val1count= (above query for val1), @val2count = (above query for val2)
请帮忙。谢谢你的期待。
答案 0 :(得分:1)
这称为旋转。一些数据库提供PIVOT功能。但是,您也可以手动执行此操作。
SELECT [Name],
SUM ( CASE WHEN [Values]='VAL1' THEN 1 ELSE 0 END ) AS Val1Count,
SUM ( CASE WHEN [Values]='VAL2' THEN 1 ELSE 0 END ) AS Val2Count
FROM [table1]
GROUP BY [Name]
说明:
CASE WHEN ... END
为每一行提供一个" boolean"行是否符合您的条件的值。SUM ( ... )
计算返回的行数" true" (或1)。GROUP BY [Name]
将每个不同名称的行合并为一行。WHERE
子句添加条件,CASE WHEN
只会看到符合WHERE
条件的行。