2017-08-01 55 views
-1

我是一個初學者。我有這段SQL代碼:訪問工會&計數

SELECT Red_tag.Zglaszajacy 
From Red_tag 
UNION 
SELECT Red_tag.Interweniujacy 
From Red_tag 

SELECT Count(Red_tag.Zglaszajacy) AS PoliczOfZglaszajacy, Red_tag.Interweniujacy AS PoliczOfInterweniujacy 
FROM Red_tag 

聯合工作,但我得到「FROM的語法錯誤」。我如何得到這樣的輸出?

|Zglaszajacy&Interweniujacy|CountOfZglaszajacy|CountOfInterweniujący| 

編輯 看起來似乎更復雜的比我想象。 Zglaszajacy和Interweniujacy是一組人。這兩個羣體也有重疊(大約30%的人在兩欄中都有記錄)。因此有些情況下,同一人在Zglaszajacy有3條記錄,Interweniujacy有7條記錄。這就是爲什麼我需要聯合這兩個組,然後顯示每個人的兩個累計計數。林不知道如果我解釋得很好,所以這裏是一個草案:

|Union of Zglaszający and Interweniujacy |Count of Zglaszajacy| Count of Interweniujacy| 
--------------------------------------------------------------------------------------- 
|John Doe        |  3    | 5      | 
|Tom Smith        | NULL    | 1      | 
+0

https://www.tutorialspoint.com/ms_sql_server/index.htm –

+0

根據您使用的SQL,您可以轉到文檔。 mySQL或Microsofts SQL。有些人不喜歡它,但你總是可以參考w3schools.com以及快速反覆試驗。 –

回答

0

通過使用UNION查詢,你正在看起來像這樣的表格:

Zglaszajacy|Interweniujacy 
A   B 
C   NULL 
NULL  B 

把它變成這樣:

Zglaszajacy 
A 
C 
NULL 
B 

由於UNION只保留不同的記錄,你已經失去了一些記錄。請使用UNION ALL來保留所有記錄。

您的第二個SQL查詢不起作用,因爲您沒有GROUP BY子句來告訴聚合函數COUNT()它應該計算什麼。

我在下面做了什麼是採取你的UNION查詢,並添加了一個標誌,如果記錄是Zglaszajacy類型或Interweniujacy類型。然後,我將它用作FROM子句中的子查詢。從那裏,你選擇你的人名,並使用COUNT()聚合函數(或SUM()也可以在這種情況下工作,因爲我用一個數字標記了它)來獲得你的總數。

最後,我添加了WHERE子句來消除分組後我留下的單個NULL名稱對您沒有用處。

SELECT Person_Name, COUNT(Z_Type) AS Zglaszajacy_Count, 
    COUNT(I_Type) AS Interweniujacy_Count 
FROM (SELECT Zglaszajacy as Person_Name, 1 AS Z_Type, NULL AS I_Type FROM Red_tag 
     UNION ALL 
     SELECT Interweniujacy, NULL, 1 FROM Red_tag) 
WHERE Person_Name IS NOT NULL 
GROUP BY Person_Name 
ORDER BY Person_Name; 

我在MS Access中測試過它,它工作。

+0

聯盟是我需要的(至少我仍然這麼認爲),但事實證明,我原來的問題是錯誤的,而不是具體的。我編輯了這篇文章。 –

+0

解決了您的問題。查看答案更新。 – SandPiper

+0

工程就像一個魅力!兩天來,我一直在試圖讓這張表生成一張圖。謝謝! –

0

我認爲,所有你需要的是

SELECT Count(Red_tag.Zglaszajacy) AS PoliczOfZglaszajacy, Red_tag.Interweniujacy AS PoliczOfInterweniujacy 


FROM Red_tag 
GROUP BY Red_tag.Interweniujacy 

所以沒必要爲UNION

0
SELECT 
    Red_tag.Zglaszajacy, 
    Red_tag.Interweniujacy, 
    (SELECT COUNT(Red_tag.Zglaszajacy) FROM Red_tag) AS PoliczOfZglaszajacy, 
    (SELECT COUNT(Red_tag.Interweniujacy) FROM Red_tag) AS PoliczOfInterweniujacy 
FROM Red_tag 

這會給你你想要的輸出,但你可能需要考慮這是否是你想要的。列3中的值將全部相同,並且列4中的值將全部相同。另外,如果列Zglaszajacy和Interweniujacy被定義爲NOT NULL,那麼所有計數值將是相同的。

+0

感謝您的回答,因爲您預測這不是我所需要的。我編輯了這篇文章。 –