我有三列,CITY
, STATE
, COUNTRY
。一列、两列或所有列都可以为 NULL。
使用以下逻辑,使用下面的 SQL 生成单个字符串。乱七八糟,不知有没有更简单的方法实现输出?我已经考虑过 CONCAT() 但我不认为我可以使用它并且仍然在那里得到分隔符。
- 如果 CITY 和 STATE 都有值,则使用该值,以 . 分隔
', '
。排除国家/地区。 - 如果仅存在 CITY 或 STATE 之一,并且存在 Country,则使用存在的 CITY/STATE 之一,加上分隔符和 COUNTRY。
- 如果 CITY 或 STATE 都不存在,则仅使用不带分隔符的国家/地区
- 如果三者中只有一个存在,则按原样使用它,不带分隔符
- 如果不存在,则输出应为 NULL(不是
''
)
我将补充一点,如果存在 CITY 和/或 STATE 值,则 COUNTRY 永远不会为 NULL。
这是到目前为止的代码。它很乱,但我相信它符合上面列出的输出要求。
我正在使用 SQL Server 2008。
CASE WHEN
CASE WHEN ISNULL(M.CITY, '') = '' THEN '' ELSE ISNULL(M.CITY, '') + ', ' END + CASE WHEN ISNULL(M.PROVINCE, '') = '' THEN '' ELSE ISNULL(M.PROVINCE, '') END
= '' THEN CASE WHEN COUNTRY IS NOT NULL THEN COUNTRY ELSE NULL END ELSE
CASE WHEN ISNULL(M.CITY, '') = '' THEN '' ELSE ISNULL(M.CITY, '') + ', ' END + CASE WHEN ISNULL(M.PROVINCE, '') = '' THEN '' ELSE ISNULL(M.PROVINCE, '') END
END
+
CASE
WHEN (M.CITY IS NULL AND M.PROVINCE IS NOT NULL) OR (M.CITY IS NOT NULL AND M.PROVINCE IS NULL) THEN
CASE WHEN PROVINCE IS NOT NULL AND CITY IS NULL THEN ', ' ELSE '' END + COUNTRY
ELSE ''
END
LOCATION
这是否满足您的需求?
如果您 100% 确定以下内容也成立(如果存在使其确定的约束条件):
那么最后两个参数也可以省略: