Поиск…


Синтаксис

  • COALESCE ([Column1], [Столбец2] .... [ColumnN]

Использование COALESCE для создания строкой с разделителями-запятыми

Мы можем получить строку с разделителями-запятыми из нескольких строк, используя coalesce, как показано ниже.

Поскольку используется переменная table, нам нужно выполнить весь запрос один раз. Поэтому, чтобы упростить понимание, я добавил блок BEGIN и END.

BEGIN

    --Table variable declaration to store sample records
    DECLARE @Table TABLE (FirstName varchar(256), LastName varchar(256))

    --Inserting sample records into table variable @Table
    INSERT INTO @Table (FirstName, LastName)
    VALUES
    ('John','Smith'),
    ('Jane','Doe')

    --Creating variable to store result          
    DECLARE @Names varchar(4000)

    --Used COLESCE function, so it will concatenate comma seperated FirstName into @Names varible
    SELECT @Names = COALESCE(@Names + ',', '') + FirstName
    FROM @Table

    --Now selecting actual result 
    SELECT @Names
    END

Общий пример Coalesce

COALESCE() возвращает первое NON NULL в списке аргументов. Предположим, у нас была таблица, содержащая номера телефонов и номера сотовых телефонов, и мы хотели вернуть только один для каждого пользователя. Чтобы получить только один, мы можем получить первое NON NULL .

DECLARE @Table TABLE (UserID int, PhoneNumber varchar(12), CellNumber varchar(12))
INSERT INTO @Table (UserID, PhoneNumber, CellNumber)
VALUES
(1,'555-869-1123',NULL),
(2,'555-123-7415','555-846-7786'),
(3,NULL,'555-456-8521')


SELECT
    UserID,
    COALESCE(PhoneNumber, CellNumber)
FROM
    @Table

Получение первого значения не из списка значений столбца

SELECT COALESCE(NULL, NULL, 'TechOnTheNet.com', NULL, 'CheckYourMath.com');
Result: 'TechOnTheNet.com'

SELECT COALESCE(NULL, 'TechOnTheNet.com', 'CheckYourMath.com');
Result: 'TechOnTheNet.com'

SELECT COALESCE(NULL, NULL, 1, 2, 3, NULL, 4);
Result: 1


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow