Employees桌子 :
| EmpID(主鍵) | 姓 | 名 |
|---|
Orders桌子 :
| OrderID(主鍵) | 客戶 ID | 企業標識 | 訂購日期 | 要求日期 | 發貨日期 |
|---|
我需要一個查詢,它回傳EmpID、LastName、FirstName、員工的訂單總數以及延遲發貨的訂單總數。如果訂單晚于ShippedDate5 天,則訂單延遲RequiredDate。我收到了遲到的貨物:
julianday(ShippedDate) - julianday(RequiredDate) >= 5
我想進行兩個單獨的查詢,一個是提交的總數,一個是延遲訂單的總數,然后UNION是它們。我沒有得到我正在尋找的結果:
SELECT Employees.EmpId, Employees.LastName, Employees.FirstName, COUNT(*) as TotalCount, NULL
FROM Orders, Employees
WHERE Orders.EmpID = Employees.EmpID
GROUP BY LastName
UNION
SELECT Employees.EmpId, Employees.LastName, Employees.FirstName, NULL, COUNT(*) as LateCount
FROM Orders, Employees
WHERE Orders.EmpID = Employees.EmpID
AND julianday(ShippedDate) - julianday(RequiredDate) >= 5
GROUP BY LastName
我最終在表的右側得到了偏移空值:
| 總數 | 無效的 |
|---|---|
| 17 | 無效的 |
| 無效的 | 25 |
等等
- 我的 UNION 出了什么問題?為什么資料偏移和列標題錯誤?
- 有更好的方法嗎?
uj5u.com熱心網友回復:
“有沒有更好的辦法? ”
JOIN而不是UNION:
SELECT
Employees.EmpID,
Employees.LastName,
Employees.FirstName,
count(*) AS TotalCount,
sum(
julianday(Orders.ShippedDate) - julianday(Orders.RequiredDate) >= 5
) AS LateCount
FROM
Employees
JOIN Orders ON Orders.EmpID = Employees.EmpID
GROUP BY
Employees.EmpID
ORDER BY
TotalCount DESC,
LateCount DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/530693.html
標籤:sqlsqlite
上一篇:如何只回傳一個特定的列?
