SQL SERVER如何将每个组作为别名

时间:2014-04-27 08:12:55

标签: sql sql-server

我想计算表格中值> 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 ....

谢谢你的进步......

1 个答案:

答案 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]