Я недавно опубликовал аналогичный вопрос, и теперь, когда мне нужно обновить этот код, я вернулся, чтобы задать дополнительный вопрос.Предыдущий вопрос здесь:
Вычисляемый столбец на основе пустых столбцов
Мои данные (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 is 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
Я немного застрял в этой точке.Любые рекомендации, что попробовать дальше?