我的問題是如何選擇不等于美元和人民幣的貨幣并重命名為其他貨幣。此外,將其組合成一個新列 AMT_Others。
ID Name Date AMT_HKD AMT_JPY AMT_USD AMT_TWD AMT_CNY
1 Amy 01/04/2022 0 5000 0 0 0
2 Bill 01/03/2022 200 0 0 0 0
3 Cathy 02/02/2022 0 0 80 2000 200
結果:
ID Name Date AMT_Others
1 Amy 01/04/2022 5000
2 Bill 01/03/2022 200
3 Cathy 02/02/2022 2000
我的代碼:(它不能生成我想要的,應該添加什么?謝謝)
select ID, Name, Date, (AMT_HKD, AMT_JPY and AMT_TWD) as AMT_Others
uj5u.com熱心網友回復:
只要我們對除美元和人民幣以外的所有貨幣只有一個非零值,基本上就可以將它們相加
Select ID, Name, Date,
AMT_HKD AMT_JPY AMT_TWD as AMT_Others
from yourtable
uj5u.com熱心網友回復:
SELECT ID, Name, Date,
AMT_HKD AMT_JPY AMT_TWD as AMT_Others
FROM tb_name;
這會起作用
uj5u.com熱心網友回復:
根據您的預期結果,您可以嘗試使用CROSS APPLYwithVALUES
SELECT ID, Name, Date,MAX(v.val) AMT_Others
FROM T CROSS APPLY(
VALUES (AMT_HKD),
(AMT_JPY),
(AMT_TWD) -- other columns) v (val)
GROUP BY ID, Name, Date
sqlfiddle
uj5u.com熱心網友回復:
您可以使用 而不是逗號或 AND 來獲得所需的結果:
SELECT id, name, ydate, amt_hkd amt_jpy amt_twd AS amt_others FROM yourtable;
但是,如果您的某些列中有空值,這是非常不愉快的。在這種情況下,總和也將為空,即使某些列不為空。您可以使用 COALESCE 來防止這種情況并強制建立總和。Null 值將被 0 替換(或其他值,如果您更改它):
SELECT id, name, ydate,
COALESCE(amt_hkd,0) COALESCE(amt_jpy,0) COALESCE(amt_twd,0) AS amt_others
FROM yourtable;
您可以在此處檢查并查看兩個查詢結果之間的區別:db<fiddle
您還應該防止作為 SQL 關鍵字的表名或列名,例如示例中的“日期”列。這就是我在回答中將其重命名的原因。當然,如果你不能改變這一點,你必須忍受它,但如果可以,你應該選擇另一個名字。
uj5u.com熱心網友回復:
除非可以有null值,否則其他答案將起作用,如果有一行其中一個列是“null”,那么結果也將為 null
select 1 2 -- output is 3
select 1 2 null -- output is null
這個問題的解決方案
isnull(AMT_HKD, 0) -- easy but slow
COALESCE(amt_hkd, 0) -- easy but still not the fastest solution
case when amt_hkd is null then 0 else amt_hkd end -- fastest
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/461141.html
