【发布时间】:2017-05-28 13:24:47
【问题描述】:
这是我的查询:
select
t.range as [score range], count(*) as [number of occurences]
from
(select
case
when answer_count between 0 and 5 then ' 0- 9'
when answer_count between 5 and 10 then '10-19'
else '20-99' end as range
from
points
where
type = 'product_quiz') t
group by
t.range
输出是:
/-------------------------------------\
| score range | number of occurrences |
|-------------+-----------------------|
| 10-19 | 121327 |
| 0- 9 | 129195 |
\-------------------------------------/
但我想要这样的输出:
/-----------------------------------------------------------------------------\
| score_range | number_of_occurrences | score_range1 | number_of_occurrences1 |
|-------------+-----------------------+--------------+------------------------|
| 10-19 | 121327 | 10-19 | 121327 |
| 0- 9 | 129195 | 0- 9 | 129195 |
\-----------------------------------------------------------------------------/
如何使用子查询来实现这一点?
【问题讨论】:
-
如果你想要那个输出,你将需要旋转。但是为什么不将每个不同的范围作为单独的列呢?
-
为什么需要子查询?这似乎会增加不必要的复杂性和额外的处理开销。您可以通过
select t.range as [score_range], count(*) as [number_of_occurences], t.range as [score_range1], count(*) as [number_of_occurences1] from ...之类的方式实现您想要的 -
但这里我的要求是这样使用..如果可能在 pivot 中那么它是很好的。
标签: sql sql-server-2008 tsql select