Eu tenho três colunas, CITY
, STATE
, COUNTRY
. Uma, duas ou todas as colunas podem ser NULL.
Com a seguinte lógica, uma única string é feita usando o SQL abaixo. É confuso e estou me perguntando se existe uma maneira mais simples de obter a saída? Eu considerei CONCAT (), mas não acho que posso usar isso e ainda colocar os separadores lá.
- se CITY e STATE tiverem um valor, use-o, separado por
', '
. Excluir PAÍS. - se existir apenas um de CIDADE ou ESTADO, E existir um País, use o de CIDADE/ESTADO que existe, mais o separador e o PAÍS.
- se não houver CIDADE nem ESTADO, use apenas o país sem separador
- se apenas um dos três existir, use-o como está, sem separador
- Se nenhum existir, a saída deve ser NULL (não
''
)
Acrescentarei que, se existir um valor CITY e/ou STATE, COUNTRY nunca será NULL.
Aqui está o código até agora. É confuso, mas acredito que atende aos requisitos de saída listados acima.
Estou trabalhando no 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
Isso faz o que você precisa?
Se você tiver 100% de certeza de que o seguinte também é válido (se houver restrições que o tornem certo):
então os últimos 2 parâmetros também podem ser omitidos: