可能有人問過這個問題,但我不知道如何在摘要中表達這個問題,所以我可能錯過了。
我的情況:
我有一個主記錄(簡化):
ServiceOrder
ID - String (15)
Status - String (1)
每個Master都有詳細記錄
SODetail
ID - String (15)
LineNbr - int
Status - String (CP)
SODetail 和 Master 加入 ON 列 ID
當值為“C”時,狀態在 Master 中關閉
當存在“CP”值時,狀態在 SODetail 中關閉
我需要一個 SQL 命令來查找所有主記錄,其值不是“C”,但其所有 SODetail 記錄的狀態都是“CP”
換句話說,某些服務訂單在其所有詳細記錄設定為關閉時未設定為關閉時發生了一些事情。我需要找到它們,以便我們修復它們。
我知道有一個命令可以給我這個,但不知何故它躲開了我。
uj5u.com熱心網友回復:
這里的訣竅是向后作業。
第一個任務是確定哪些 ID 的所有狀態都是 CP
SELECT ID
FROM SODetail
GROUP BY ID
HAVING COUNT(*) = SUM(CASE WHEN Status = 'CP' THEN 1 ELSE 0 END)
以上是僅以“CP”作為其狀態的 ID 串列。它通過計算詳細記錄的數量,并計算狀態為“CP”的詳細記錄的數量,并回傳這些計數相同的 ID 來實作此目的。
有了上面的相關 ID,您可以輕松地將其加入您的主記錄并按主記錄的狀態進行過濾。
SELECT SO.ID
FROM ServiceOrder AS SO
INNER JOIN
(SELECT ID
FROM SODetail
GROUP BY ID
HAVING COUNT(*) = SUM(CASE WHEN Status = 'CP' THEN 1 ELSE 0 END)
) AS SOD ON SO.ID = SOD.ID
WHERE SO.Status <> 'C'
編輯:更多解釋和一些澄清
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/371563.html
標籤:sql sql-server 查询语句
