2017-03-18 43 views
0

我有這個疑問SQL查詢工會

SELECT e.ename, SUM(md.prices) AS TotalSales 
FROM Employee2 e inner join MakesD2 md on md.eid=e.eid 
GROUP BY e.ename 
UNION ALL 
SELECT e.ename 
FROM Employee2 e left join MakesD2 md on md.eid=e.eid 
WHERE md.eid is NULL; 

,但我不斷收到此錯誤。任何方式我可以解決它?

+3

*我不斷收到此錯誤*絕對是毫無意義的,除非你也有什麼*此錯誤*是特別。它在你的屏幕上,但我們無法從我們所在的位置看到它。你問我們**免費幫助**解決**你的問題**;至少你應該做的就是給我們提供你可以使用的信息。 –

回答

1

A union all必須對所有子查詢具有相同的列。因此,請添加第二列:

SELECT e.ename, SUM(md.prices) AS TotalSales 
FROM Employee2 e inner join MakesD2 md on md.eid=e.eid 
GROUP BY e.ename 
UNION ALL 
SELECT e.ename, NULL 
FROM Employee2 e left join MakesD2 md on md.eid=e.eid 
WHERE md.eid is NULL; 

您的查詢可能不需要union all。這可能是你想要什麼:

SELECT e.ename, SUM(md.prices) AS TotalSales 
FROM Employee2 e left join 
    MakesD2 md 
    on md.eid = e.eid 
GROUP BY e.ename; 

然而,這是更接近原始的(因爲name可以出現在查詢中多次):

SELECT e.ename, SUM(md.prices) AS TotalSales 
FROM Employee2 e left join 
    MakesD2 md 
    on md.eid = e.eid 
GROUP BY e.ename, (CASE WHEN md.eid IS NULL THEN 1 ELSE 2 END); 

此版本只包括name一次,甚至如果Employee2中存在多個行,但給定名稱不匹配MakesD2

+0

非常感謝! –

0
  • 列數出現在對應的SELECT語句中 必須相等。
  • 列中出現的每個SELECT對應位置的 語句必須具有相同的數據類型或至少可轉換的數據類型爲 。

你可以像下面

SELECT e.ename, SUM(md.prices) AS TotalSales 
FROM Employee2 e inner join MakesD2 md on md.eid=e.eid 
GROUP BY e.ename 
UNION ALL 
SELECT e.ename, 0 As TotalSales 
FROM Employee2 e left join MakesD2 md on md.eid=e.eid 
WHERE md.eid is NULL; 
+0

謝謝。此外,我有兩個相同的emp名稱,但他們是兩個不同ID的人。我將如何顯示這兩個名字。 –

+0

@NatheeshSelvan我將我的答案更改爲同名2人。 – JBrooks

0

請嘗試以下查詢:

SELECT e.eid, e.ename, COALESCE(SUM(md.prices), 0) AS TotalSales 
    FROM Employee2 e 
    LEFT JOIN MakesD2 md 
    ON md.eid = e.eid 
    GROUP BY e.eid, e.ename 
    ORDER BY e.ename, e.eid