请参阅下面的屏幕截图
以下查询肯定应该将HELD_PARAM和HELD_VALUE字段一起作为HEADER加入
SELECT *
,ISNULL(HDR_PARAM, '') + ISNULL(HELD_VALUE, '') AS HEADER
FROM "dbo"."T_table"
我试图对一个HELD_VALUE进行硬编码以反映不同的结果,如下面的屏幕截图所示。有人能告诉我查询有什么问题吗? Screenshot
SELECT *,
ISNULL(HDR_PARAM, '') + (ISNULL(HELD_VALUE, ''),
CASE WHEN HELD_VALUE = 'Y' THEN 'Z'
ELSE HELD_VALUE
END) AS HEADER
FROM "dbo"."T_table"
答案 0 :(得分:2)
您可以改用CONCAT。它忽略了NULL&#39>
SELECT *,
CONCAT(HDR_PARAM,
CASE
WHEN HELD_VALUE = 'Y' THEN 'Z'
ELSE HELD_VALUE
END) AS HEADER
FROM "dbo"."T_table"
我知道CONCAT并不完全是标准的SQL。但是很多数据库都有它。 (虽然Oracle的版本只接受2个参数)
答案 1 :(得分:1)
您可以将CASE
放在ISNULL
内,如下所示:
SELECT *,
ISNULL(HDR_PARAM, '') +
ISNULL
(
CASE WHEN HELD_VALUE = 'Y'
THEN 'Z'
ELSE HELD_VALUE END,
''
) AS HEADER
FROM "dbo"."T_table"
答案 2 :(得分:1)
要复制第二个屏幕截图:
SELECT
*,
ISNULL(HDR_PARAM, '') AS HDR_PARAM,
ISNULL(HELD_VALUE, '') AS HELD_VALUE,
CASE
WHEN HELD_VALUE = 'Y' THEN (HDR_PARAM + 'Z')
ELSE (HDR_PARAM + HELD_VALUE)
END AS HEADER
FROM "dbo"."T_table"
请注意,所有SQL引擎都不支持使用+
的字符串concat;有些需要CONCAT
函数或类似的方法。