iT邦幫忙

0

SQL指令 join table +欄位該如何寫?

下面的SQL執行後如圖一,如何可以變成像圖二一樣多加一欄TTYPE的欄位?https://ithelp.ithome.com.tw/upload/images/20190710/201081572NfhCcqbzE.jpg

https://ithelp.ithome.com.tw/upload/images/20190710/20108157AMwN4na0Sd.jpg

SELECT A.IT5,A.IT6,A.IT7
A.IT63,A.IT57,A.IT53,A.IT34
FROM big AS A
LEFT JOIN
(SELECT 1 AS TTYPE,IT5,IT6,IT7
FROM big
WHERE IT88='TRUE' AND IT8='TRUE') B ON A.IT9=B.IT9
LEFT JOIN
(SELECT 2 AS TTYPE,IT5,IT6,IT7
FROM big
WHERE IT88='TRUE' AND IT9='TRUE') C ON A.IT9=C.IT9
LEFT JOIN
(SELECT 3 AS TTYPE,IT5,IT6,IT7
FROM big
WHERE IT88='TRUE' AND IT10='TRUE') D ON A.IT9=D.IT9

WHERE A.IT88='TRUE'

pcw iT邦研究生 2 級 ‧ 2019-07-10 12:28:05 檢舉
感覺用SELECT + CASE 可能就做得到,不需要JOIN

1 個回答

2
小魚
iT邦高手 1 級 ‧ 2019-07-10 11:38:01
最佳解答

你到底跟誰JOIN了 XD

看更多先前的回應...收起先前的回應...
hheyjen iT邦新手 5 級 ‧ 2019-07-10 11:50:51 檢舉

都是big這個table,只是where 條件不同,ttype欄位要辨別是哪個狀態要出報表用

小魚 iT邦高手 1 級 ‧ 2019-07-10 13:11:27 檢舉

我的想法跟pcw大大差不多,
資料表設計好不好這就不討論了,
不過你的需求應該可以透過以下方式取得

SELECT (CASE
   WHEN IT8='TRUE' THEN 1
   WHEN IT9='TRUE' THEN 2
   WHEN IT10='TRUE' THEN 3
   END) AS TTYPE,
   IT5, IT6, IT7
   FROM big
   WHERE IT88='TRUE'

另外你的IT88既然已經放在WHERE的篩選條件中,
前面就不用判斷IT88了.

hheyjen iT邦新手 5 級 ‧ 2019-07-10 14:15:09 檢舉

謝謝!學到技巧

小魚 iT邦高手 1 級 ‧ 2019-07-10 15:07:17 檢舉

有空把所有的SQL語法再複習一遍,
網路查一下就可以查到有人整理過的,
這算是基本的語法而已.

hheyjen iT邦新手 5 級 ‧ 2019-07-10 15:36:42 檢舉

您提供的sql指令,請問該如何將1轉換為字串?如1 變成支出,2變成收入,3變成不處理,4變成處理?

SELECT (CASE
WHEN IT8='TRUE' THEN N'支出'
WHEN IT9='TRUE' THEN N'收入'
WHEN IT10='TRUE' THEN N'不處理'
END) AS TTYPE,
IT5, IT6, IT7
FROM big
WHERE IT88='TRUE'

'(字串)'
前面加個N是以防編碼方式跑出亂碼
參考 https://www.itread01.com/p/1399893.html
hheyjen

小魚 iT邦高手 1 級 ‧ 2019-07-11 16:09:58 檢舉

備註一下, N是針對MS-SQL,
如果是MySql不能加N,
每個SQL的用法會有些差別,
下次提問最好先說一下你用的是什麼SQL.

我要發表回答

立即登入回答