2015-02-11 111 views
1

在這個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個查詢結果)

+0

請後預期的輸出格式。 – 2015-02-11 08:03:00

+0

@wewesthemenace請立即檢查 – SpringLearner 2015-02-11 08:05:32

+0

那麼,您期待單行輸出? – 2015-02-11 08:07:42

回答

1

這裏是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 
2
select value, count(id) 
from status 
group by value 
+0

感謝您的回答,但我必須有條件使用我的情況。在小提琴我只提供了一個參數(ID),但在我的情況下有2或3參數(但在所有ID參數是commmon) – SpringLearner 2015-02-11 08:06:36

1

使用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://stackoverflow.com/a/6066234

[編輯1]

檢查小提琴,它的工作原理在我的機器上;)http://sqlfiddle.com/#!6/b89ef/1/0

因爲我刪除一(3)從插入,你就會得到4,3(我只選擇四肢和三分球在這裏)。

[編輯2]

我沒趕上一部分,你想讓它全部在一行。

就環繞你的語句SELECThttp://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作爲結果。

+0

謝謝,我試過在sqlfiddle,但它不顯示任何輸出 – SpringLearner 2015-02-11 08:12:57

+1

聯盟丟棄非獨特的值,所以使用他的例子,你只能得到一列結果的一列。 – Smutje 2015-02-11 08:13:56

+0

然後使用Union All保留重複項。 – 2015-02-11 08:14:39

1

你應該更好地被下面的查詢數由值的行和組:

SELECT COUNT(*) FROM status GROUP BY value 

或更好的說明,並期待試試這個:

SELECT value, COUNT(*) AS COUNT FROM status GROUP BY value 
+0

這是好的,如果我需要比較只有一列(id),如何如果我必須與其他列進行比較 – SpringLearner 2015-02-11 08:15:21

+0

只需添加它們兩個選擇(如果有必要)和group by(must !!!)子句。有關使用GROUP BY子句的更多詳細信息,請參閱https://msdn.microsoft.com/en-us/library/ms177673.aspx – user3021830 2015-02-11 08:16:31

+0

我希望使用此模式:創建表狀態( 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

0

如果你在找什麼是一個逗號分隔的字符串,那麼這可能會有幫助:

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'')