如何在一列中获取多个值的计数值

时间:2014-06-18 19:15:23

标签: sql

我的数据是这样的

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)

请帮忙。谢谢你的期待。

1 个答案:

答案 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条件的行。