T SQL Инициализация массива и LINQ Где на массиве - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь выполнить агрегирование строк для адреса в T- SQL, чтобы в строке, разделенной запятыми, использовались любые поля адреса, отличные от NULL. Я знаю, как бы это сделать в C#, но потерял с SQL.

Вот что у меня есть (мне нужно преобразовать часть C# в SQL):

SELECT STRING_AGG
(
    --Start of C# (I don't know how to convert this into SQL).
    new[]
    {
        Addresses.Line1,
        Addresses.Line2,
        Addresses.Line3,
        Addresses.City,
        Addresses.County,
        Addresses.State,
        Countries.Name,
        Addresses.Postcode
    }
    .Where(data => data != null)
    --End of C#
    ,
    ', '
) Address
FROM Addresses
JOIN Countries ON Countries.Id = Addresses.CountryId

1 Ответ

2 голосов
/ 03 марта 2020

Лично я бы привел их обратно в виде столбцов и беспокоился о форматировании в коде приложения!

STRING_AGG действительно предназначен для объединения строки данных; вы работаете с столбцами , поэтому вам, вероятно, лучше сделать что-то вроде:

SELECT CONCAT(Addresses.Line1,
    N', ' + Addresses.Line2,
    N', ' + Addresses.Line3,
    -- ...
    N', ' + Addresses.Postcode)

CONCAT игнорирует null значения, а N',' + {some column} будет null если {some column} равно null, то это удаляет промежуточные разделители для всех пропущенных значений. Это делает своего рода предположением, что Line1 имеет значение - без этого может быть начальная запятая. Вы можете удалить это при необходимости.

...