如何获取连接多个查询
在这个http://sqlfiddle.com/#!6/aa0e17/4中,您可以看到id是主键并自动递增,值列是int类型。要根据值获取计数我做的4个不同的查询如何获取连接多个查询
select count(id) from status where value=1
select count(id)from status where value=2
select count(id) from status where value=3
select count(id) from status where value=4
我的要求是获得在一个查询所有这些罪名。
为什么我要?
上表只是一个演示表,只有4个查询,但在我的场景中,我有35个查询,所以我必须在java中执行35个方法。
预期输出:4,,4,4,4(第1查询结果,第2个查询结果,第3查询结果,第4个查询结果)
这里是s的两种常规方法olving它:
例1个PIVOT:
SELECT [1] count1,[2] count2,[3] count3,[4] count4
FROM
(
SELECT id, value
FROM status
) p
PIVOT (COUNT(id) FOR [value] IN ([1], [2], [3], [4])) AS pvt
使用CONCAT如果要列合二为一。
为了在第一示例与为此,替换第一行:
SELECT CONCAT([1],',',[2],',',[3],',',[4])
实施例2 CASE:
SELECT
COUNT(CASE WHEN value = 1 THEN 1 END) count1,
COUNT(CASE WHEN value = 2 THEN 1 END) count2,
COUNT(CASE WHEN value = 3 THEN 1 END) count3,
COUNT(CASE WHEN value = 4 THEN 1 END) count4
FROM status
select value, count(id)
from status
group by value
感谢您的回答,但我必须有条件使用我的情况。在小提琴我只提供了一个参数(ID),但在我的情况下有2或3参数(但在所有ID参数是commmon) – SpringLearner 2015-02-11 08:06:36
使用UNION
(或UNION ALL
保存重复的值),如:
select count(id) from status where value=1
UNION
select count(id)from status where value=2
UNION
select count(id) from status where value=3
UNION
select count(id) from status where value=4
看一看一个类似的问题在这里:https://*.com/a/6066234
[编辑1]
检查小提琴,它的工作原理在我的机器上;)http://sqlfiddle.com/#!6/b89ef/1/0
因为我删除一(3)从插入,你就会得到4,3(我只选择四肢和三分球在这里)。
[编辑2]
我没赶上一部分,你想让它全部在一行。
就环绕你的语句SELECT
像http://sqlfiddle.com/#!6/aa0e17/34/0:
select
(select count(id) from status where value=1),
(select count(id) from status where value=2),
(select count(id) from status where value=3),
(select count(id) from status where value=4)
;
的检查结果是一排用4,4,4,4作为结果。
谢谢,我试过在sqlfiddle,但它不显示任何输出 – SpringLearner 2015-02-11 08:12:57
联盟丢弃非独特的值,所以使用他的例子,你只能得到一列结果的一列。 – Smutje 2015-02-11 08:13:56
然后使用Union All保留重复项。 – 2015-02-11 08:14:39
你应该更好地被下面的查询数由值的行和组:
SELECT COUNT(*) FROM status GROUP BY value
或更好的说明,并期待试试这个:
SELECT value, COUNT(*) AS COUNT FROM status GROUP BY value
这是好的,如果我需要比较只有一列(id),如何如果我必须与其他列进行比较 – SpringLearner 2015-02-11 08:15:21
只需添加它们两个选择(如果有必要)和group by(must !!!)子句。有关使用GROUP BY子句的更多详细信息,请参阅https://msdn.microsoft.com/en-us/library/ms177673.aspx – user3021830 2015-02-11 08:16:31
我希望使用此模式:创建表状态( id int主键IDENTITY(1 ,1),值int,类别int); (1,1),(2,1),(3,2),(4,2),(1,3),(2,2),(3,1),(4,1) ,(1,1),(2,1),(3,2),(4,2),(1,1),(2,2),(3,2),(4,2 ) – user3021830 2015-02-11 08:19:11
如果你在找什么是一个逗号分隔的字符串,那么这可能会有帮助:
WITH CTE(N) AS(
SELECT COUNT(ID) FROM STATUS WHERE VALUE=1 UNION ALL
SELECT COUNT(ID)FROM STATUS WHERE VALUE=2 UNION ALL
SELECT COUNT(ID) FROM STATUS WHERE VALUE=3 UNION ALL
SELECT COUNT(ID) FROM STATUS WHERE VALUE=4 UNION ALL
)
SELECT STUFF((
SELECT N', ' + CONVERT(VARCHAR(10), N)
FROM CTE FOR XML PATH(''), TYPE
).value('text()[1]','nvarchar(max)')
, 1 , 2 , N'')
请后预期的输出格式。 – 2015-02-11 08:03:00
@wewesthemenace请立即检查 – SpringLearner 2015-02-11 08:05:32
那么,您期待单行输出? – 2015-02-11 08:07:42