具有IF条件和WHERE条件的CONCAT列



我有一个有两列的表- APPLICATION和SOURCE。

如果APPLICATION列不包含该STRING,则需要将STRING附加到APPLICATION列中的值。我需要这样做的来源是一定的值。所以不是整个表

示例:Where SOURCE = 'string1', CONCAT 'string2' to APPLICATION如果APPLICATION不包含'string2'

仅供参考-应用程序中的值看起来像"苹果,香蕉,饼干",其中没有空格。如果string2是'cookie',那么我需要一个命令来识别该值中的'cookie'并跳过该列。

样本:表名:table_1列:application, sourceb

WHERE SOURCE = ' account ', 'credit', 'mortgage'或'loan'如果应用程序没有"CMS",则附加"CMS"。否则,如果有'CMS',什么也不做。

所以如果SOURCE value = 'MMA,CMS,ABC',什么也不做,因为它包含'CMS'。如果SOURCE value = 'CBS,ABC,NBC',则追加',CMS' ->哥伦比亚广播公司、美国广播公司、美国全国广播公司(NBC)、CMS。当然,这只适用于SOURCE = ' account ', 'credit', 'mortgage'或'loan'的情况。

Table_1(前)

| application | source |"CMS,NBC,ABC"|"acct"|"ABC,NBC"|"信用"|【综合格斗】【储蓄| 'CMS' | 'loan' |

Table_1(后)

| application | source |"CMS,NBC,ABC"|"acct"||"ABC,NBC,CMS"|"信用"|【综合格斗】【储蓄| 'CMS' | 'loan' |

您可以使用case

为更新

UPDATE table_1
SET application = CASE WHEN application LIKE '%CMS%' THEN application ELSE CONCAT(application,',CMS') END
WHERE source IN('acct', 'credit', 'mortgage','loan')

或只选择

SELECT 
CASE WHEN application LIKE '%CMS%' THEN application ELSE CONCAT(application,',CMS') END AS application,
source
FROM table_1
WHERE source IN('acct', 'credit', 'mortgage','loan')

或所有行

SELECT 
CASE WHEN application LIKE '%CMS%' THEN application ELSE CONCAT(application,',CMS') END AS application,
source
FROM table_1
WHERE source IN('acct', 'credit', 'mortgage','loan')
UNION
SELECT *
FROM table_1
WHERE source NOT IN('acct', 'credit', 'mortgage','loan')

demo indb<>fiddle

最新更新