我有一個問題,我的SQL查詢不會擺脫空值。SQL組合列
我已經嘗試了無數種不同的技術,但我是一個新手。
我想要的結果是一個訂單號,後面跟着狀態出現在一行中的日期。
select mo.order_id OrderID,
case when osr.order_status_cd = 120 and osr.create_date is not null then osr.create_date end as POCreated,
case when osr.order_status_cd = 220 and osr.create_date is not null then osr.create_date end as Ordered,
case when osr.order_status_cd = 300 and osr.create_date is not null then osr.create_date end as Shipped,
case when osr.order_status_cd = 400 and osr.create_date is not null then osr.create_date end as Received,
case when osr.order_status_cd = 500 and osr.create_date is not null then osr.create_date end as Completed,
from order_status_record osr
inner join msorder mo on mo.order_id = osr.msorder_id
非但沒有結果看起來像這樣的:
OrderID POCreated Ordered Shipped Received Completed
497822 11/18/2012 NULL NULL NULL NULL
497822 NULL 11/19/2012 NULL NULL NULL
497822 NULL NULL 11/19/2012 NULL NULL
497822 NULL NULL NULL 11/19/2012 NULL
497822 NULL NULL NULL NULL 11/19/2012
我想這一點:
OrderID POCreated Ordered Shipped Received Completed
497822 11/18/2012 11/19/2012 11/19/2012 11/19/2012 11/19/2012
我需要創建一個虛擬表?我需要一個if函數嗎?爲什麼空值仍然存在?
任何幫助將不勝感激。
感謝,
安德魯
順便說一句,所有的'和osr.create_date沒有在你的情況下null'位是多餘的,可遺漏了。如果其條件不滿足,則這些CASE中的任何一個評估爲NULL。所以目前,當'osr.create_date'爲NULL但條件的第一部分爲true時,CASE將返回NULL,因爲整個條件爲false。但是,修改的CASE(具有縮短的條件)也會返回NULL,只有它會將其作爲'osr.create_date'的內容返回。 –