我想计算表格中值> gt = 10的所有列。 这是我的表:
Date##### | Value1 | Value2 | Value3 | Type 23/04/2014 | 1,2 | 12,3 | 10 | Alert 23/04/2014 | 11,2 | 3 | 10,3 | Alert 24/04/2014 | 10,9 | 3 | 1 | Non-Alert
我想将每个组作为别名的列类型,例如:GROUP BY Type =' Alert'作为TAlert,Group BY Type =' Non-Alert as TNon-Alert'。
假设我有很多日期组,我希望它只显示最后3组日期。
到目前为止,这是我的代码:
select d, cnt
from (
select top 3 [Date] as d,
sum( Case When value1 >= 10 then 1 else 0 end
+ Case When Value2 >= 10 then 1 else 0 end
) as cnt
from tbBooth
GROUP BY [Date],[Type]
Order By [Date] DESC
) x
ORDER BY d ASC
反正怎么办?因为我想把它放在我的折线图系列中,系列1中的TAlert和series2中的TNon-Alert。 这是我表中查询的结果,
> d代表日期,,, cnt进行计数
d | Type | cnt 23/04/2014 | Non-Alert | 8 24/04/2014 | Alert | 3 24/04/2014 | Non-Alert | 7
然后,我想以列类型取每个组。例如,警报组为TAlert,或非警报组为TNon-Alert ....
谢谢你的进步......
答案 0 :(得分:1)
您需要首先取消它,然后使用CASE进行SUM。我不确定“只有最后3组日期”适合哪里,也许更完整的样本数据会有所帮助。
但是,凭借我们现在拥有的,试试这个:
;with x as (
select *
from (
select [date], [type], Value1, Value2, Value3
from tbBooth
) p
unpivot (
v for val in (Value1, Value2, Value3)
) as up
)
select [date], [type], sum(case when v >= 10 then 1 else 0 end)
from x
group by [date], [type]