这将根据需要创建由分号分隔的两个字符子字符串,并通过自定义函数删除尾随的分号。
CASE
WHEN ISNULL(mcp.N5_5_CARE_INTENT,'') <> 'X'
THEN
NULLIF(dbo.RemoveLastCharacter
(COALESCE(mcp.N5_6_TREATMENT_TYPE_1 + ';','') +
COALESCE(mcp.N5_6_TREATMENT_TYPE_2 + ';','') +
COALESCE(mcp.N5_6_TREATMENT_TYPE_3 + ';','') +
COALESCE(mcp.N5_6_TREATMENT_TYPE_4 + ';','')),'')
ELSE NULL
END PlannedTreatmentType但这还不够,因为我希望两个字符子串和最终的连接只包含:
'01', '02', '03', '05', '06'如果有一个子字符串不是其中之一,那么应该返回NULL。
例如
01;05;06是好的,所以也是好的
06;01但
01;07或
09;08su这必须与SQL2000兼容。谢谢。
发布于 2014-02-07 00:58:51
在将每个值放入字符串之前,您需要对其进行测试。此外,您还可以使用stuff()方法来代替您的函数。
(CASE WHEN ISNULL(mcp.N5_5_CARE_INTENT,'') <> 'X'
THEN stuff((case when mcp.N5_6_TREATMENT_TYPE_1 in ('01', '02', '03', '05', '06')
then ';'+mcp.N5_6_TREATMENT_TYPE_1
else ''
end) +
(case when mcp.N5_6_TREATMENT_TYPE_2 in ('01', '02', '03', '05', '06')
then ';'+mcp.N5_6_TREATMENT_TYPE_2
else ''
end) +
(case when mcp.N5_6_TREATMENT_TYPE_3 in ('01', '02', '03', '05', '06')
then ';'+mcp.N5_6_TREATMENT_TYPE_3
else ''
end) +
(case when mcp.N5_6_TREATMENT_TYPE_4 in ('01', '02', '03', '05', '06')
then ';'+mcp.N5_6_TREATMENT_TYPE_4
else ''
end)
), 1, 1, '')
ELSE NULL
END) as PlannedTreatmentTypestuff()将任意字符序列替换为另一个值。使用参数1, 1, '',它删除字符串的第一个字符。请注意,分号现在位于值的开头,而不是结尾。
顺便说一句,将这些值存储在一行查看中可能是一个错误。也许您应该考虑创建一个表,其中每个实体(可能是患者)有一行,每个治疗类型有一行。
https://stackoverflow.com/questions/21608431
复制相似问题