Я отправил аналогичный вопрос некоторое время назад, и теперь, когда мне нужно обновить этот код, я снова задаю следующий вопрос. Предыдущий вопрос здесь:
Computed column based on nullable columnsВычислительная колонка (COALESCE vs CASE vs ISNULL)
Мои данные (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
Я немного застрял в этом по внутр. Любые рекомендации, что попробовать дальше?
В чем вопрос? –
Мой вопрос: как я могу построить инструкцию так, что в случае отсутствия данных (например, отсутствует Address1), вычисленный столбец FullAddress не начинается с ',' –