我之前发布过类似的问题,现在需要更新这段代码,所以回来问一个后续问题。之前的问题在这里:
基于可空列的计算列
我的数据(Address1,Address2,City,State,Zip,Country
)可能有不完整的信息。也就是说,我不能保证除了State
和Country
列会有数据。
我想为FullAddress
创建一个计算列。
以前,我使用了COALESCE
,如果所有字段都填写了,那么它就非常好用。现在,由于数据要求已经放松,这不再是一个选择(因为我们最终在FullAddress
中会出现重复的逗号)。以下是我以前使用的内容(请注意,我只是为了方便使用而在此处使用SELECT语句 - 一旦我拥有适用于所有情况的内容,将转换为计算列“alter table add”语句):
SELECT (((((COALESCE([Address1],'')
+ COALESCE(', '+[Address2],''))
+ COALESCE(', '+[City],''))
+ COALESCE(', '+[State],''))
+ COALESCE(', '+[Zip],''))
+ COALESCE(', '+[Country],'')) AS FullAddress
FROM Locations
现在,我已经使用CASE
组合了一个替代方案,但是对于Address1为NULL
的边缘情况仍然无法解决(问题在于FullAddress
将以', '作为前两个字符)
SELECT CASE WHEN [Address1] IS NOT NULL THEN [Address1] ELSE '' END
+ CASE WHEN [Address2] IS NOT NULL THEN ', ' + [Address2] ELSE '' END
+ CASE WHEN [City] IS NOT NULL THEN ', ' + [City] ELSE '' END
+ CASE WHEN [State] IS NOT NULL THEN ', ' + [State] ELSE '' END
+ CASE WHEN [Zip] IS NOT NULL THEN ', ' + [Zip] ELSE '' END
+ CASE WHEN [Country] IS NOT NULL THEN ', ' + [Country] ELSE '' END
AS [FullAddress]
FROM Locations
我在这一点上有些困惑。你有什么建议可以尝试吗?