iT邦幫忙

2

MSSQL,UPDATE一串查詢中的兩個欄位

https://ithelp.ithome.com.tw/upload/images/20180124/20011133YuVuKvNOXy.jpg

SELECT a.商品貨號, a.級數, a.撥貨量, 
b.商品貨號 AS 商品基本檔的商品貨號, 
b.商品簡稱 AS 商品基本檔的商品簡稱 FROM 商品級數撥貨檔 As a 
RIGHT OUTER JOIN 商品基本檔 As b ON a.商品貨號 = b.商品貨號
WHERE (b.大類編號 = '8')
ORDER BY b.商品貨號

各位前輩晚安
此段語法中,有Right join另外一個Table
請教兩個問題:
1.如何將a.級數 為null值的欄位全部填入'E'
2.如何將a.撥貨量 為null值的欄位全部填入'1'
3.承1.、2.,如何將a.商品貨號 一併補上正確貨號
謝謝

圓圓 iT邦新手 5 級 ‧ 2018-01-24 20:25:42 檢舉
我覺得使用MSSQL 內建的isNull函數就可以處理你的問題了。
當然如果你要更新的話,可以把下面的語法當成一個來源資料表,然後再以UPDATE From table的方式處理更新
SELECT isnull(a.商品貨號,b.商品貨號) as 商品貨號
, isnull(a.級數,'E') as 級數
, isnull(a.撥貨量,'1') AS 撥貨量,
b.商品貨號 AS 商品基本檔的商品貨號,
b.商品簡稱 AS 商品基本檔的商品簡稱 FROM 商品級數撥貨檔 As a
RIGHT OUTER JOIN 商品基本檔 As b ON a.商品貨號 = b.商品貨號
WHERE (b.大類編號 = '8')
ORDER BY b.商品貨號
sjzgo iT邦新手 5 級 ‧ 2018-01-25 10:52:46 檢舉
```
Update
(SELECT isnull(a.商品貨號,b.商品貨號) as 商品貨號
, isnull(a.級數,'E') as 級數
, isnull(a.撥貨量,'1') AS 撥貨量,
b.商品貨號 AS 商品基本檔的商品貨號,
b.商品簡稱 AS 商品基本檔的商品簡稱 FROM 商品級數撥貨檔 As a
RIGHT OUTER JOIN 商品基本檔 As b ON a.商品貨號 = b.商品貨號
WHERE (b.大類編號 = '8')) As a
Set a.級數 = '1E, a.撥貨量 = '1'
```

1 個回答

3
做工仔人!
iT邦高手 1 級 ‧ 2018-01-24 21:38:17
最佳解答

SELECT case when a.商品貨號 is null then b.商品貨號 else a.商品貨號 end 商品貨號, case when a.級數 is null then 'E' else a.級數 end 級數,
case when a.撥貨量 is null then 1 else a.撥貨量 end 撥貨量 ,
b.商品貨號 AS 商品基本檔的商品貨號,
b.商品簡稱 AS 商品基本檔的商品簡稱 FROM 商品級數撥貨檔 As a
RIGHT OUTER JOIN 商品基本檔 As b ON a.商品貨號 = b.商品貨號
WHERE (b.大類編號 = '8')
ORDER BY b.商品貨號

三個問題應該都解了.

看更多先前的回應...收起先前的回應...
sjzgo iT邦新手 5 級 ‧ 2018-01-25 10:48:19 檢舉

請教大大,要如何將您此段查詢套用上Update實際將資料更新過去?

sjzgo iT邦新手 5 級 ‧ 2018-01-25 10:59:01 檢舉

您所提供的語法,用於查詢是正確的沒錯!
https://ithelp.ithome.com.tw/upload/images/20180125/20011133ZI1kXLe9R3.jpg

請問:商品級數撥貨檔 這個TABLE 只有:商品貨號,級數,撥貨量 這三個欄位嗎?

如果是: 應該要用 INSERT INTO 的方式.
語法:
INSERT INTO 商品級數撥貨檔(商品貨號,級數,撥貨量)
SELECT 商品貨號,'E',1
from FROM 商品級數撥貨檔 As a
RIGHT OUTER JOIN 商品基本檔 As b ON a.商品貨號 = b.商品貨號
WHERE b.大類編號 = '8' and a.商品貨號 is null

如果不是: 就有點麻煩.
要看全部欄位的內容及 UNIQUE KEY 的設定. 否則資料會出錯.

sjzgo iT邦新手 5 級 ‧ 2018-01-25 13:20:06 檢舉

是的,只有:商品貨號、級數、撥貨量,這三個欄位
執行後有有個錯誤,不知是否與Select後面的 As a有關?
https://ithelp.ithome.com.tw/upload/images/20180125/20011133vWAddpl067.jpg

sjzgo iT邦新手 5 級 ‧ 2018-01-25 13:22:00 檢舉

圖片有點模糊...內容如下:

伺服器: 訊息 209,層級 16,狀態 1,行 1
模稜兩可的資料行名稱 '商品貨號'。

INSERT INTO 商品級數撥貨檔(商品貨號,級數,撥貨量)
SELECT b.商品貨號,'E',1
from FROM 商品級數撥貨檔 As a
RIGHT OUTER JOIN 商品基本檔 As b ON a.商品貨號 = b.商品貨號
WHERE b.大類編號 = '8' and a.商品貨號 is null

sjzgo iT邦新手 5 級 ‧ 2018-01-25 15:14:32 檢舉

看出來差異了,也完成了
SELECT b.商品貨號,'E',1

還請前輩簡單說明整個語法的運作方式
小弟是SQL新手很多地方都不了解原理
目前都還在Select、Where、From的基礎階段學習
望您不吝伺教,指導
萬分感謝您!

sjzgo iT邦新手 5 級 ‧ 2018-01-25 15:15:05 檢舉

https://ithelp.ithome.com.tw/upload/images/20180125/20011133wSozMFwgjf.jpg

1.原先的錯誤說明:
伺服器: 訊息 209,層級 16,狀態 1,行 1
模稜兩可的資料行名稱 '商品貨號'。

=>因為"商品級數撥貨檔"及"商品基本檔"這二個TABLE中均有'商品貨號'這個欄位,但是在 SELECT 商品貨號 時,並沒有指定這個欄位是要從那個TABLE 來.所以系統才會報錯.
2.語法重點說明:
商品級數撥貨檔 As a
RIGHT OUTER JOIN 商品基本檔 As b ON a.商品貨號 = b.商品貨號

=>以"商品基本檔"為準比對"商品級數撥貨檔",所以只要符合WHERE條件的商品基本檔資料會全部顯示(全部被SELECT到),但是"商品級數撥貨檔"中沒有被參照到的資料就會以NULL 的方式呈現.(這就是版本第一個畫面中有部份資料顯示NULL的原因)
WHERE b.大類編號 = '8' and a.商品貨號 is null
=>"商品基本檔"有資料但是"商品級數撥貨檔"不存在的資料,a.商品貨號必定為NULL.

sjzgo iT邦新手 5 級 ‧ 2018-01-29 18:19:28 檢舉

謝謝前輩,很感謝!(舉手禮)

我要發表回答

立即登入回答