【发布时间】:2014-04-29 04:16:07
【问题描述】:
我想在具有 group by 的同一个表上组合两个查询。
这是我的桌子:
Date##### | Value1 | Value2 | Value3 | Type
------------------------------------------------------
23/04/2014 | 1,2 | 12,3 | 10 | Green
23/04/2014 | 11,2 | 3 | 10,3 | Non-Green
24/04/2014 | 10,9 | 3 | 11 | Green
24/04/2014 | 2,3 | 12,3 | 8 | Green
24/04/2014 | 10 | 1 | 11 | Non-Green
25/04/2014 | 10 | 2 | 10,8 | Non-Green
25/04/2014 | 1,4 | 5 | 12 | Green
这些值为Decimal 类型。计算value1,value2,value3 >= 10。预期结果:
Date##### | Green |Non-Green
------------------------------
23/04/2014 | 2 | 2
24/04/2014 | 3 | 2
25/04/2014 | 1 | 2
绿色和非绿色的值来自于 value1、value2、value3 的计数 >=10,这是我的第一个查询:
Dim strCommand As String = "SELECT d, LW, cnt FROM(SELECT TOP 7 [date] AS d, [Type] as LW, SUM(CASE WHEN Value1 >= 10 THEN 1 ELSE 0 END + CASE WHEN Value2 >= 10 THEN 1 ELSE 0 END + CASE WHEN Value3 >= 10 THEN 1 ELSE 0 END) AS cnt FROM tbBooth where Type = 'Green' GROUP BY [date],[Type] ORDER BY [date] DESC) x ORDER BY d ASC"
它显示:
Date##### | Cnt |Type
------------------------
23/04/2014 | 2 | Green
24/04/2014 | 3 | Green
25/04/2014 | 1 | Green
我的第二个查询:
Dim strCommand As String = "SELECT d, LW, cnt FROM(SELECT TOP 7 [date] AS d, [Type] as LW, SUM(CASE WHEN Value1 >= 10 THEN 1 ELSE 0 END + CASE WHEN Value2 >= 10 THEN 1 ELSE 0 END + CASE WHEN Value3 >= 10 THEN 1 ELSE 0 END) AS cnt FROM tbBooth where Type = 'Non-Green' GROUP BY [date],[Type] ORDER BY [date] DESC) x ORDER BY d ASC"
它显示:
Date##### | Cnt |Type
------------------------
23/04/2014 | 2 | Non-Green
24/04/2014 | 2 | Non-Green
25/04/2014 | 2 | Non-Green
我想将两个查询合并为一个,并获取日期、绿色的结果和非绿色的结果。假设我有很多日期组,我希望它只显示基于ASC 顺序的最后 7 组日期。
有什么办法吗?我尝试查看其他 SO 帖子,例如使用 UNION 或 PIVOT,但我不知道如何在我的代码中实现它。
对不起,我昨天已经发布了这个问题,这是一个预期结果的编辑......
提前谢谢....
【问题讨论】:
-
检查我的查询以轻松获得输出。
-
这个问题你问过多少次了?
-
@Mihai 这么多,,,哈哈哈……不好意思,之前效果不好……
标签: sql sql-server select pivot union