Разделить и получить результаты от T-SQL - PullRequest
0 голосов
/ 09 марта 2019

У меня есть некоторый код T-SQL, который извлекает информацию из таблицы SQL Server.Мне нужно проанализировать столбец и отобразить в соответствии со следующим набором результатов.Я знаком с SQL, было бы здорово, если бы вы не отметили как дубликат и показали, как это сделать.

Можете ли вы помочь?

SELECT Account, CTSFirm, AccountName, BOCodeGMI 
FROM StagingEDFACRRBO

BOCodeGMI столбец содержит:

e=01:c=KW:m=10000
c=C-:e=01:m=10000
c=S-:e=01:m=10000
c=06:e=01:m=10
c=07:e=01:m=100
c=W-:e=01:M=10000

Логика для разделения BOCodeGMI и отображения двух отдельных столбцов BOCodeGMI_1 &BOCodeGMI_2:

  • Если строка содержит e=, то отобразить BOCodeGMI_1 в качестве соответствующего значения (например, 01), если строка не содержит e=, тогдаотобразить BOCodeGMI_1 как NULL

  • Если строка содержит c=, отобразить BOCodeGMI_2 в качестве соответствующего значения (например: C-), если строка не содержит c=затем отобразите BOCodeGMI_2 как NULL

Наконец, вот как это должно отображаться -

BOCodeGMI            BOCodeGMI_1          BOCodeGMI_2 
-----------------------------------------------------
e=01:c=KW:m=10000    01                   KW
c=C-:e=01:m=10000    01                   C-
c=S-:e=01:m=10000    01                   S-

1 Ответ

1 голос
/ 09 марта 2019

Попробуйте следующий запрос, используя CASE , CHARINDEX & SUBSTRING

SELECT 
    BOCodeGMI,
    CASE
        WHEN CHARINDEX('e=', BOCodeGMI) > 0 
            THEN SUBSTRING (BOCodeGMI, CHARINDEX('e=', BOCodeGMI) + 2 , 2) 
    END as BOCodeGMI_1,
    CASE
        WHEN CHARINDEX('c=', BOCodeGMI) > 0 
           THEN SUBSTRING (BOCodeGMI, CHARINDEX('c=', BOCodeGMI) + 2, 2)
    END as BOCodeGMI_2
FROM
    tableName

CASE для прохождения условий и возврата значения.

CHARINDEX для поиска подстроки в строке и возврата позиции.

SUBSTRING для извлечения некоторых символов из строки.

...