需要帮助在 SQL JOIN 中设置列值
Need help setting a column value in the SQL JOIN
我正在使用以下代码更新 SQL JOIN 语句中的列值。
CASE when SUBSTRING(m.x1,1,1) = 1 then '1, ' else '' END
+ CASE when SUBSTRING(m.x1,2,1) = 1 then '2, ' else '' END
+ CASE when SUBSTRING(m.x1,3,1) = 1 then '3, ' else '' END
+ CASE when SUBSTRING(m.x1,4,1) = 1 then '4, ' else '' END
+ CASE when SUBSTRING(m.x1,5,1) = 1 then '5, ' else ''
END AS "x1",
例如,如果上述 CASE 语句中的所有条件都为真,则 x1 的值将为“1、2、3、4、5”,但我需要该值为“1、2、 3、4、5”。如何从 JOIN 本身的字符串中删除最后一个“逗号分隔符”。
提前致谢!
改为
CASE when SUBSTRING(m.x1,1,1) = 1 then '1, ' else '' END
+ CASE when SUBSTRING(m.x1,2,1) = 1 then '2, ' else '' END
+ CASE when SUBSTRING(m.x1,3,1) = 1 then '3, ' else '' END
+ CASE when SUBSTRING(m.x1,4,1) = 1 then '4, ' else '' END
+ CASE when SUBSTRING(m.x1,5,1) = 1 then '5' else ''
END AS "x1
逗号不要放在末尾,放在开头,然后去掉第一个字符。在 SQL 服务器中删除第一个字符要容易得多,因为您可以使用 STUFF
将其删除 STUFF(<String Expression>,1,1,'')
。因为你有一个逗号 (,
) 和一个 space (' '
),所以你需要删除 2 个字符,而不是 1 个。你也可以使用 CONCAT
来删除ELSE ''
:
SELECT STUFF(CONCAT(CASE SUBSTRING(m.x1,1,1) WHEN 1 then ', 1' END,
CASE SUBSTRING(m.x1,2,1) WHEN 1 then ', 2' END,
CASE SUBSTRING(m.x1,3,1) WHEN 1 then ', 3' END,
CASE SUBSTRING(m.x1,4,1) WHEN 1 then ', 4' END,
CASE SUBSTRING(m.x1,5,1) WHEN 1 then ', 5' END),1,2,'') AS x1
如果您使用的是较新版本的 SQL,则可以改用 CONCAT_WS
:
SELECT CONCAT_WS(' ,',CASE SUBSTRING(m.x1,1,1) WHEN 1 then '1' END,
CASE SUBSTRING(m.x1,2,1) WHEN 1 then '2' END,
CASE SUBSTRING(m.x1,3,1) WHEN 1 then '3' END,
CASE SUBSTRING(m.x1,4,1) WHEN 1 then '4' END,
CASE SUBSTRING(m.x1,5,1) WHEN 1 then '5' END) AS x1
我会推荐 concat_ws()
:它在参数之间添加了分隔符,并且在 SQL 服务器中,具有忽略 null
值的良好特性;这通过避免 else
分支到 case
表达式的需要进一步简化了代码。
concat_ws (',',
case when substring(m.x1,1,1) = 1 then '1' end,
case when substring(m.x1,2,1) = 1 then '2' end,
case when substring(m.x1,3,1) = 1 then '3' end,
case when substring(m.x1,4,1) = 1 then '4' end,
case when substring(m.x1,5,1) = 1 then '5' end,
) as x1
我正在使用以下代码更新 SQL JOIN 语句中的列值。
CASE when SUBSTRING(m.x1,1,1) = 1 then '1, ' else '' END
+ CASE when SUBSTRING(m.x1,2,1) = 1 then '2, ' else '' END
+ CASE when SUBSTRING(m.x1,3,1) = 1 then '3, ' else '' END
+ CASE when SUBSTRING(m.x1,4,1) = 1 then '4, ' else '' END
+ CASE when SUBSTRING(m.x1,5,1) = 1 then '5, ' else ''
END AS "x1",
例如,如果上述 CASE 语句中的所有条件都为真,则 x1 的值将为“1、2、3、4、5”,但我需要该值为“1、2、 3、4、5”。如何从 JOIN 本身的字符串中删除最后一个“逗号分隔符”。
提前致谢!
改为
CASE when SUBSTRING(m.x1,1,1) = 1 then '1, ' else '' END
+ CASE when SUBSTRING(m.x1,2,1) = 1 then '2, ' else '' END
+ CASE when SUBSTRING(m.x1,3,1) = 1 then '3, ' else '' END
+ CASE when SUBSTRING(m.x1,4,1) = 1 then '4, ' else '' END
+ CASE when SUBSTRING(m.x1,5,1) = 1 then '5' else ''
END AS "x1
逗号不要放在末尾,放在开头,然后去掉第一个字符。在 SQL 服务器中删除第一个字符要容易得多,因为您可以使用 STUFF
将其删除 STUFF(<String Expression>,1,1,'')
。因为你有一个逗号 (,
) 和一个 space (' '
),所以你需要删除 2 个字符,而不是 1 个。你也可以使用 CONCAT
来删除ELSE ''
:
SELECT STUFF(CONCAT(CASE SUBSTRING(m.x1,1,1) WHEN 1 then ', 1' END,
CASE SUBSTRING(m.x1,2,1) WHEN 1 then ', 2' END,
CASE SUBSTRING(m.x1,3,1) WHEN 1 then ', 3' END,
CASE SUBSTRING(m.x1,4,1) WHEN 1 then ', 4' END,
CASE SUBSTRING(m.x1,5,1) WHEN 1 then ', 5' END),1,2,'') AS x1
如果您使用的是较新版本的 SQL,则可以改用 CONCAT_WS
:
SELECT CONCAT_WS(' ,',CASE SUBSTRING(m.x1,1,1) WHEN 1 then '1' END,
CASE SUBSTRING(m.x1,2,1) WHEN 1 then '2' END,
CASE SUBSTRING(m.x1,3,1) WHEN 1 then '3' END,
CASE SUBSTRING(m.x1,4,1) WHEN 1 then '4' END,
CASE SUBSTRING(m.x1,5,1) WHEN 1 then '5' END) AS x1
我会推荐 concat_ws()
:它在参数之间添加了分隔符,并且在 SQL 服务器中,具有忽略 null
值的良好特性;这通过避免 else
分支到 case
表达式的需要进一步简化了代码。
concat_ws (',',
case when substring(m.x1,1,1) = 1 then '1' end,
case when substring(m.x1,2,1) = 1 then '2' end,
case when substring(m.x1,3,1) = 1 then '3' end,
case when substring(m.x1,4,1) = 1 then '4' end,
case when substring(m.x1,5,1) = 1 then '5' end,
) as x1