Sql server SQL SERVER如何在具有;分组方式;
我想在具有group by的同一个表上组合两个查询。 这是我的桌子:Sql server SQL SERVER如何在具有;分组方式;,sql-server,vb.net,select,union,Sql Server,Vb.net,Select,Union,我想在具有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
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
25/04/2014 | 10 | 2 | 10,8 | Non-Green
25/04/2014 | 1,4 | 5 | 12 | Green
我希望它显示:
Date##### | Count |Type
23/04/2014 | 2 | Green
23/04/2014 | 2 | Non-Green
24/04/2014 | 3 | Green
25/04/2014 | 2 | Non-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 ManualAssists1 >= 10 THEN 1 ELSE 0 END + CASE WHEN ManualAssists2 >= 10 THEN 1 ELSE 0 END + CASE WHEN ManualAssists3 >= 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##### | Count |Type
23/04/2014 | 2 | Green
24/04/2014 | 3 | Green
25/04/2014 | 1 | Green
Date##### | Count |Type
23/04/2014 | 2 | Non-Green
25/04/2014 | 2 | Non-Green
我的第二个问题:
Dim strCommand As String = "SELECT d, LW, cnt FROM(SELECT TOP 7 [date] AS d, [Type] as LW, SUM(CASE WHEN ManualAssists1 >= 10 THEN 1 ELSE 0 END + CASE WHEN ManualAssists2 >= 10 THEN 1 ELSE 0 END + CASE WHEN ManualAssists3 >= 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##### | Count |Type
23/04/2014 | 2 | Green
24/04/2014 | 3 | Green
25/04/2014 | 1 | Green
Date##### | Count |Type
23/04/2014 | 2 | Non-Green
25/04/2014 | 2 | Non-Green
我想将这两个查询合并为一个查询,并获取日期、绿色结果和非绿色结果。假设我有很多组日期,我希望它仅显示基于ASC
顺序的最后7组日期。我尝试在两个查询之间添加联合。以下是我目前的代码:
Dim strCommand As String = "Select 'Test1', * from tbBooth where type ='Green' and exist(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 GROUP BY [date],[Type] ORDER BY [date] DESC) x ORDER BY d ASC) Union Select 'Test2', * from tbBooth where type ='Non-Green' and exist(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 GROUP BY [date],[Type] ORDER BY [date] DESC) x ORDER BY d ASC)
它给了我一个错误,关键字“SELECT”附近的语法不正确。
怎么做呢?我试着去看其他的SO帖子,但我没有任何线索去做,因为我的两个查询都很复杂
感谢您的改进……这并不是因为您的组合查询很复杂,只是它错了 我不明白的是为什么你有WHERE类型='Green'和'Non-Green'。 考虑到您想要的结果,您可以将其从何处移除,并获得您想要的:
SELECT d ,
LW ,
cnt
FROM ( SELECT TOP 7
[date] AS d ,
[Type] AS LW ,
SUM(CASE WHEN ManualAssists1 >= 10 THEN 1
ELSE 0
END + CASE WHEN ManualAssists2 >= 10 THEN 1
ELSE 0
END + CASE WHEN ManualAssists3 >= 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
其中:
2014-04-23 Green 2
2014-04-23 Non-Green 2
2014-04-24 Green 3
2014-04-25 Green 1
2014-04-25 Non-Green 2
当两个查询除了WHERE?Bro中的“Type”之外都相同时,我认为没有必要“组合”这两个查询,在您的代码中将
exist
更改为exists
:)这应该行得通
更新:
添加Top7
以选择
Select 'Test1', * from tbBooth
where type ='Green' and exists(SELECT **top 7** 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 GROUP BY [date],[Type]
ORDER BY [date] DESC) x ORDER BY d ASC)
Union
Select 'Test2', * from tbBooth where type ='Non-Green'
and exists(SELECT **top 7** 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 GROUP BY [date],[Type] ORDER BY [date] DESC) x ORDER BY d ASC)
是的,你是对的,但实际上我想把绿色类型和非绿色类型作为别名。我想让它变成一组绿色的数据或一组非绿色的数据,这样我就可以调用它并把它放在我的图表上……我不明白你在追求什么?如果要合并结果,请在不使用WHERE的情况下运行它;如果只需要一个,那么在这种情况下添加WHERE,如果需要多个类型,那么在WHERE中添加所有需要的类型?感谢您的更正,但它仍然给我一个错误,它说:ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。您是否可以检查更新后的答案,将
TOP 7
添加到您的选择我尝试了您的代码,它可以执行,但不会在我的图表中显示任何内容。。我在图表中调用了d、Test1和Test2……嗨,兄弟,你能提供准确的列名和数据吗?因为它对你的查询没有意义,我真的不明白你是如何用逗号求和的~它们是十进制类型…所以你的逗号是指小数点,对吗?可以