我有一對多的表。表ticket
和表solution
。每張票有幾種解決方案。解決方案有列:ticketId
,status
和serviceId
。簡單的SQL與GROUP BY HAVING AND WHERE
所以,每張票都可以通過一個或多個服務解決。 Status
可以是:ready to resolve
和done
。只有一項服務可以爲票證工作。但也有可用的情況,其中票證的所有解決方案都有狀態=可以解決。
我想從所有門票表對獲得:票行 - 解列,其中:服務Id = N和門票與狀態沒有其他服務=完成。
我試圖通過這個解決我的問題:
SELECT t.*, s.* FROM Ticket t
JOIN Solution s ON t.id = s.ticketId
WHERE s.serviceId = N
GROUP BY s.ticketId HAVING SUM(CASE WHEN s.serviceId <> N AND s.status = 'done' THEN 1 ELSE 0 END) = 0;
但這種方式不工作,因爲WHERE s.serviceId = N
只選擇一行和ofcouse,總和永遠爲0。如果我刪除WHERE,再總結開始計算正確,但我從表solution
總是第一排票,但我想要服務= N行。
我該如何解決它?
例子。
票務T.解決方案:S1(服務= N,狀態=就緒),S2(服務= K,狀態=就緒) - >得到(T,S1)。
票務T.解決方案:S1(服務= N,狀態=完成),S2(服務= K,狀態=就緒) - >得到(T,S1)。
票務T.解決方案:S1(服務= N,狀態=就緒),S2(服務= K,狀態=完成) - >空。
Ofcouse,可以S3,S4與服務Q,W ...但是不管怎麼說:零或一個解決方案將有狀態=完成。
我在下面嘗試了一個答案,但是我覺得你的數據可能沒有被標準化。 –
請提供反饋給下面給出的深思熟慮的答覆。 –