Повторите запрос SQL и создайте один выходной столбец - PullRequest
0 голосов
/ 16 октября 2018

Я застрял со странной проблемой, которая убивает меня.У меня есть таблица, которая в основном сводится к следующему:

CREATE TABLE #Sample (ColA VARCHAR (20), ColB VARCHAR (20), ColC VARCHAR (20), ColD VARCHAR (10), ColE VARCHAR (10) )

INSERT INTO #Sample VALUES ('6250', '1001', '12AA', '12AA', ''),
                           ('6250', '1002', '12AA', '12AA', ''),
                           ('6251', '1003', '12BB', '12BB', 'A'),
                           ('6252', '1004', '12CC', '12CC', '')

Я получил спецификации для формы заказа на доставку.Для каждого значения ColB я должен повторить следующие шаги, чтобы создать один выходной столбец.Первые две строки - текст, вторая и третья - префиксы + значения из столбцов B и C. В качестве бонуса, только если заполнен ColE, мы должны выбрать префикс плюс ColE.

Возможно, это звучит странно,поэтому я добавлю желаемый результат:

'A1 Text'
'A2 Text'
'ZZ62501001' -- ZZ prefix + ColA + ColB
'ZZ12AA' -- ZZ prefix + ColC
'A1 Text'
'A2 Text'
'ZZ62501002' -- ZZ prefix + ColA + ColB
'ZZ12AA' -- ZZ prefix + ColC
'A1 Text'
'A2 Text'
'ZZ62511003' -- ZZ prefix + ColA + ColB
'ZZA' -- ZZ prefix + ColE (notice that this is only shown when ColE is filled)
'ZZ12BB' -- ZZ prefix + ColC
'A1 Text'
'A2 Text'
'ZZ62521004' -- ZZ prefix + ColA + ColB
'ZZ12CC' -- ZZ prefix + ColC

В этой настройке так много неправильного, но я не имею никакого влияния на этот вопрос.Так что я застрял с этой проблемой.

Я пытался сначала создать «обычную» выходную таблицу, а затем попытаться создать новую с одним столбцом.

Моя попытка кода,что довольно плохо, но я все равно включу его:

CREATE TABLE #Output ( ColA VARCHAR (100),
                       ColB VARCHAR (100),
                       ColC VARCHAR (100),
                       ColD VARCHAR (100),
                       ColE VARCHAR (100) )


DECLARE @Counter INT 
SET @Counter = 1

WHILE @Counter < ( SELECT MAX (RowNumb) FROM #Sample )

BEGIN 

    INSERT INTO #Output
    SELECT 'A1 Text',
         'A2 Text',
         'ZZ' + ColA + ColB, -- ZZ prefix + ColA + ColB
         'ZZ' + ColC,
         'ZZ' + ColE
    FROM #Sample

SET @Counter = @Counter + 1

END

SELECT * FROM #Output

Если кто-нибудь сможет решить эту странную проблему, которая у меня есть, и создать желаемый результат, я был бы очень признателен.

Производительностьздесь нет ничего особенного, имея дело с парой тысяч строк, поэтому курсор или цикл не являются проблемой.

1 Ответ

0 голосов
/ 16 октября 2018

Используя перекрестное применение, вы построите несколько строк в строке:

declare @Sample table (ColA VARCHAR (20), ColB VARCHAR (20), ColC VARCHAR (20), ColD VARCHAR (10), ColE VARCHAR (10) )

INSERT INTO @Sample VALUES ('6250', '1001', '12AA', '12AA', ''),
                           ('6250', '1002', '12AA', '12AA', ''),
                           ('6251', '1003', '12BB', '12BB', 'A'),
                           ('6252', '1004', '12CC', '12CC', '')



select a.results
from @Sample
    cross apply (values ('A1 Text')
                        ,('A2 Text')
                        ,('ZZ' + ColA + ColB)
                        ,('ZZ' + ColC)
                        ,('ZZ' + ColE)
                ) a(results)
where a.results != 'ZZ'

Результаты:

results
A1 Text
A2 Text
ZZ62501001
ZZ12AA
A1 Text
A2 Text
ZZ62501002
ZZ12AA
A1 Text
A2 Text
ZZ62511003
ZZ12BB
A1 Text
A2 Text
ZZ62521004
ZZ12CC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...