我的情况是订单可以有多个报价。现在您可以看到报价可以打开或取消。我希望返回订单,其中每个报价都被取消。
Order No Quote Number Quote Status
256 12 CANCEL
256 13 OPEN
678 18 CANCEL
678 16 CANCEL
678 19 CANCEL
此数据的预期结果:
Order No Quote Number Quote Status
678 16 CANCEL
普通的group by子句给我这个结果
SELECT order No, Min(Quote Number), Min (Quote Status)
FROM TABLE
GROUP BY Order No
Order No Quote Number Quote Status
256 12 CANCEL
678 16 CANCEL
但是很明显这不是我想要的,因为它仍然会返回256级。因此它看起来被取消了但是如果这是有意义的话它真的有一个打开的引用。
有人可以帮忙吗?感谢
答案 0 :(得分:5)
你非常接近。只需使用having
子句:
SELECT orderNo, MIN(QuoteNumber), MAX(QuoteStatus)
FROM TABLE
GROUP BY OrderNo
HAVING MIN(QuoteStatus) = MAX(QuoteStatus) AND MIN(QuoteStatus) = 'Cancelled'
答案 1 :(得分:0)
我知道您从Cancel
函数获取Min()
,但我认为这对您也有用。
SELECT order No, Min(Quote Number), Min (Quote Status)
FROM TABLE
Where [Quote Status] = 'CANCEL'
AND [Order No] NOT IN (Select [Order NO] From TABLE Where [Quote Status] = 'OPEN')
GROUP BY Order No
答案 2 :(得分:0)
您可以尝试此代码
5 June
我假设QuoteStatus字段中没有NULL值。如果有NULL,则代替SELECT OrderNo,MIN(QuoteNumber),QuoteStatus
FROM TABLE
WHERE OrderNo NOT IN (
SELECT OrderNo FROM TABLE
Where QuoteStatus <> 'CANCEL')
GROUP BY OrderNo,QuoteStatus
写Where QuoteStatus <> 'CANCEL'