2017-03-03 212 views
0

我是新來的SQL,我堅持的東西,肯定很容易解決,但是讓我瘋狂。我有一個巨大的AS400 txt數據導出,我需要從中獲取一些數據。使用單個查詢,我可以得到正確的數字,但是我想知道是否有辦法編寫一個查詢,該查詢給出了一個包含四個結果的表,每個查詢都在一個列中。UNION ALL在同一個表中導致不同的列?

這些都是四個查詢:

SELECT COUNT([DATA1]) FROM (SELECT DISTINCT [DATA1] FROM STATUS); 
SELECT COUNT([DATA2]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3] FROM STATUS); 
SELECT COUNT([DATA3]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3], [TAL] FROM STATUS); 
SELECT SUM([UNITS]) AS TOTAL FROM STATUS; 

試圖與UNION ALL,但所有的結果在同一列中顯示出來。

有沒有辦法做到這一點?在一個查詢中獲取四個數字,並將每個數字導入不同的列。

非常感謝您的幫助和時間。

+1

你能告訴我們您預期的輸出? – balaji

+1

不相關,但:第一個查詢可以簡化爲'select count(distinct data1)from status;'(儘管我希望SQL Server足夠聰明,可以自己做) –

+0

您好,感謝您的回覆。 DISTINCT是必要的,因爲在文檔的列中,相同的數字重複多次。這個想法是要獲得該列中存儲了多少個唯一的數字。例如,假設第1列有:第10個重複五次,第12個重複七次。我需要獲得的是列中存儲了多少個唯一數字的計數。在這個例子中,兩個。 – ElCodificadorWey

回答

0

這可能是你想要什麼:

SELECT 
(SELECT COUNT([DATA1]) FROM (SELECT DISTINCT [DATA1] FROM STATUS)) [DATA1], 
(SELECT COUNT([DATA2]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3] FROM STATUS)) [DATA2], 
(SELECT COUNT([DATA3]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3], [TAL] FROM STATUS)) [DATA3], 
(SELECT SUM([UNITS]) AS TOTAL FROM STATUS) [UNITS]; 

有可能是空間與全部子查詢的進一步改善,但與此查詢,你應該得到所有的COUNT結果在一個單行的不同列。

+0

你好,謝謝你的回覆。我需要在查詢結尾處添加一個「from STATUS」以使其工作。在編輯一下你的查詢以滿足我的需要(添加一些WHERE,沒有別的)後,我在不同的列中得到正確的結果,但在成千上萬行中重複,而不是單行。 – ElCodificadorWey

+0

這可能是由於最後添加了「FROM STATUS」引起的。也許你應該在你的問題中包含一個'CREATE TABLE ...'腳本,並且添加修改過的查詢,以便我們開發一個通用模型。 –

0

我在SQL Server 2008中檢查,我注意到,對查詢取數(數據2)和Count(數據3),我們可能需要指定一個別名內選擇具有鮮明,序得到正確的結果。

SELECT DATA1_CNT = (SELECT COUNT([DATA1]) FROM (SELECT DISTINCT [DATA1] FROM STATUS)), 
DATA2_CNT =(SELECT COUNT([DATA2]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3] FROM STATUS) d1), 
DATA3_CNT = (SELECT COUNT([DATA3]) FROM (SELECT DISTINCT [DATA1], [DATA2], [DATA3], [TAL] FROM STATUS) d2), 
UNITS_SUM = (SELECT SUM([UNITS]) AS TOTAL FROM STATUS) 
相關問題