所有
抱歉 - 这可能是一个简单的简单SQL问题,但我无法弄清楚如何编写Google搜索来获取我需要的内容。
我有一个看起来像这样的表:
id color points
--- ----- ------
1 red 10
2 blue 20
3 blue 30
4 red 100
5 blue 70
6 blue 200
7 red 30
我想知道两件事:
使用count()
,sum()
和group by
,我可以轻松创建如下所示的结果集:
select
color,
count(color),
sum(points)
from
my_table
group by
color
color count points
----- ----- ------
red 3 140
blue 4 320
然而,我真正想要的是一行结果如下:
red_count red_points blue_count blue_points
--------- ---------- ---------- -----------
3 140 4 320
对于它的价值 - 我理想的查询不需要灵活处理不确定数量的不同颜色;假设总是只有两种颜色,我100%好。
另外 - 在这种情况下,我正在使用SQL Server,如果解决方案使用特定于此的东西,我就可以了。 (当然,通用的SQL解决方案会更好......)
提前致谢!
答案 0 :(得分:3)
尝试此通用查询:
SELECT SUM(CASE WHEN color='red' THEN 1 ELSE 0 END) red_count
,SUM(CASE WHEN color='red' THEN points ELSE 0 END) red_points
,SUM(CASE WHEN color='blue' THEN 1 ELSE 0 END) blue_count
,SUM(CASE WHEN color='blue' THEN points ELSE 0 END) blue_points
FROM yourTable
答案 1 :(得分:3)
SELECT SUM(CASE WHEN color = 'red' THEN 1 ELSE 0 END) red_count,
SUM(CASE WHEN color = 'red' THEN points ELSE 0 END) red_points,
SUM(CASE WHEN color = 'Blue' THEN 1 ELSE 0 END) blue_count,
SUM(CASE WHEN color = 'Blue' THEN points ELSE 0 END) blue_points
FROM tableName
答案 2 :(得分:3)
您可以使用聚合和CASE
表达式转移数据:
select
sum(case when color = 'red' then 1 else 0 end) red_count,
sum(case when color = 'red' then points end) red_points,
sum(case when color = 'blue' then 1 else 0 end) blue_count,
sum(case when color = 'blue' then points end) blue_points
from my_table