iT邦幫忙

0

如何用SQL指令相同欄位,因條件不同,顥示在不同欄位?

sql
XYZ 2019-02-22 17:54:507857 瀏覽

如果table a 單號資料是 i開頭,則table b的金額欄位,顥示table b的金額欄位為收入金額,支出金額是0。
如果table a 單號資料是 o開頭,則table b的金額欄位,顥示table b的金額欄位為支出金額,收入金額是0。
這個SQL指令要如何下?

希望呈現結果如下:
https://ithelp.ithome.com.tw/upload/images/20190222/20108157vR8y2ju7Ah.png

小魚 iT邦大師 1 級 ‧ 2019-02-22 17:58:07 檢舉
你只有寫你要的結果, 但是沒有原始資料, 怎麼回答呢?
slime iT邦大師 1 級 ‧ 2019-02-22 18:05:23 檢舉
方法1:
select 單號,金額 as 收入金額,0 from abc where substr(單號,1,1)='i'
union
select 單號,0,金額 as 支出金額 from abc where substr(單號,1,1)='o'

方法2:
select 單號,case(如果單號是i開頭就顯示金額,不然就顯示0),case(如果單號是o開頭就顯示金額,不然就顯示0) from seethreesmall
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
張小馬~
iT邦新手 3 級 ‧ 2019-02-22 19:21:58
最佳解答

這道提問的疑點在,table a有單號,table b有金額,那請問table b有單號嗎?那不就直接from table b 做下面這件事就好了?如果table b沒有單號,那我從table a,怎會知道是要對應table b的哪個金額?

select
單號,
CASE WHEN LEFT(單號,1)='i' THEN 金額 ELSE 0 END 收入金額,
CASE WHEN LEFT(單號,1)='o' THEN 金額 ELSE 0 END 支出金額
from a

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=521ba1e72bb6646aa0b0527d34c21fcb

https://ithelp.ithome.com.tw/upload/images/20190222/20111566GPKRH4eJAf.png

--2019/2/23更新以下
回原po,就再包一層,這種要group by兩次。

select
單案號,
SUM(收入金額) 前期收入金額,
SUM(支出金額) 前期支出金額
from(
--原本外面再加一層
select a.專案號,a.單號,
CASE WHEN LEFT(a.單號,1)='I' THEN sum(b.金額) ELSE 0 END 收入金額,
CASE WHEN LEFT(a.單號,1)='O' THEN sum(b.金額) ELSE 0 END 支出金額
from a
left join b on a.單號=b.單號
group by a.專案號,a.單號
--原本外面再加一層
) y
group by 單案號
XYZ iT邦新手 4 級 ‧ 2019-02-23 10:13:14 檢舉

您好,
謝謝您的回覆.

用您的方式,SQL指令如下:
select a.專案號,a.單號,
CASE WHEN LEFT(a.單號,1)='I' THEN sum(b.金額) ELSE 0 END 收入金額,
CASE WHEN LEFT(a.單號,1)='O' THEN sum(b.金額) ELSE 0 END 支出金額
from a
left join b on a.單號=b.單號
group by a.專案號,a.單號

結果如下:

https://ithelp.ithome.com.tw/upload/images/20190223/20108157RfrR6F5UU9.png

不好意思我沒描述清楚,我不想要出現單號,需要的是加總相同專案號的金額,希望結果如下:
https://ithelp.ithome.com.tw/upload/images/20190223/20108157Xi7T7AA1mW.png

原本的SQL包起來,外面再下一次sum & group by,已更新原回答。

XYZ iT邦新手 4 級 ‧ 2019-03-07 15:35:35 檢舉

謝謝 ^^

我要發表回答

立即登入回答