因為DB2常跟別人的語法不一樣~
備註依有用到時更新~
@@ 限制回傳筆數 ==> limit 3
FETCH FIRST 3 ROWS ONLY
@@ 判斷null時給default值 ==> ISNULL(col, 0)
IFNULL(numcol,0)
IFNULL(strcol,'')
@@動態判斷是否要篩選條件 IFNULL(isNull)
SELECT ... FROM ...
WHERE ...
And STATUS = IFNULL('{?STATUS_P}', STATUS)
@@CASE 應用
CASE
WHEN test-condition THEN value
WHEN test-condition THEN value
ELSE value
END
@@ 動態判斷 空值->不篩選, 非空值->條件
常見大家會說用IFNULL來做,但因為用到的地方,它無法傳NULL進來,沒值是傳空字串,所以得用CASE來做
SELECT ... FROM ...
WHERE ...
And STATUS =
CASE
WHEN '{?STATUS_P}' != '' THEN '{?STATUS_P}'
ELSE STATUS
END
@@ 用動態的方式,把三個條件is not null, is null, 不篩選做成一個SQL...
用CASE 來將符合條件的資料給成一個新的欄位 DATA_CHECK,符合給YES,不合給NO,然後再從中挑出DATA_CHECK='YES'的就可以成功了!其中
example:
SELECT a.* FROM (
SELECT XXX.ID, YYY.ID as ID2,
CASE
WHEN ('{?TYPE_P}' = '1' And YYY.ID is not Null) THEN 'YES'
WHEN ('{?TYPE_P}' = '2' And YYY.ID is Null) THEN 'YES'
WHEN ('{?TYPE_P}' = '0') THEN 'YES'
ELSE 'NO'
END as DATA_CHECK,
......From XXX, YYY
Where ....
FETCH FIRST 10 ROWS ONLY ) a
WHERE a.DATA_CHECK = 'YES'
沒有留言:
張貼留言