Конвертировать несколько столбцов в строки - PullRequest
0 голосов
/ 31 октября 2011

У меня есть устаревшая таблица со следующими столбцами.

Create Table test
( id varchar(50)
, code1 varchar(50)
, codeDesc1 varchar(50)
, code2 varchar(50)
, codeDesc2 varchar(50)
, code3 varchar(50)
, codeDesc3 varchar(50)
, code4 varchar(50)
, codeDesc4 varchar(50)
, code5 varchar(50)
, codeDesc5 varchar(50)
, code6 varchar(50)
, codeDesc6 varchar(50)
)

insert into test (id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6)
values ('1','100.1', 'first code','100.2', 'Second code','100.3', 'Third code','100.4', 'Fourth code','100.5', 'Fifth code','100.6', 'Sixth code')

insert into test (id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6)
values ('2','100.1', 'first code','100.2', 'Second code','100.3', 'Third code','100.4', 'Fourth code','100.5', 'Fifth code','100.6', 'Sixth code')

select * from test

возвращает следующее:

id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6

1,100.1, first code,100.2, Second code,100.3, Third code,100.4, Fourth code,100.5, Fifth code,100.6, Sixth code

2,100.1, first code,100.2, Second code,100.3, Third code,100.4, Fourth code,100.5, Fifth code,100.6, Sixth code

Но я хочу получить данные обратно, как показано ниже:

ID, Code, Description

1, 100.1, First Code
1, 100.2, Second Code
1, 100.3, Third Code
1, 100.4, Fourth Code
1, 100.5, Fifth Code
1, 100.6, Sixth Code
2, 100.1, First Code
2, 100.2, Second Code
2, 100.3, Third Code
2, 100.4, Fourth Code
2, 100.5, Fifth Code
2, 100.6, Sixth Code

Кто-нибудь может мне помочь, как это сделать, пожалуйста?

Я пробовал UNPIVOT, но не дал мне точный результат, который я искал.Вот запрос, который я использовал, но его нужно настроить, чтобы получить точный результат, когда я нахожусь в трудное время.

SELECT Id, FieldCode , FieldValue
    FROM 
    (
        SELECT  id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6
        FROM test
    ) MyTable
    UNPIVOT
    (FieldValue FOR FieldCode IN (code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6))AS MyUnPivot

Спасибо за вашу помощь заранее.

1 Ответ

1 голос
/ 01 ноября 2011

Никогда не думай, нашел ответ.Благодаря этому замечательному сайту Мангала http://mangalpardeshi.blogspot.com/2009/04/unpivot-multiple-columns.html

И вот мой запрос, который решил мою проблему: я разместил здесь сообщение так, что если кто-то, кто смотрит

SELECT Id, FieldCode, FieldValue
    FROM 
    (
        SELECT  id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6
        FROM test
    ) MyTable

    UNPIVOT
    (FieldCode FOR FieldCodes IN (code1, code2, code3, code4, code5, code6))AS CODE

    UNPIVOT
    (FieldValue FOR FieldValues IN (codeDesc1, codeDesc2, codeDesc3, codeDesc4, codeDesc5, codeDesc6))AS FieldValues

WHERE RIGHT(FieldCodes,1) =  RIGHT(FieldValues,1)

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

Кроме того, неплохо бы проверить ISNULL в первоначальном запросе, в котором вы возвращаете оригинальные столбцы.Потому что, как только он находится в режиме UNPIVOT, у вас нет изменений, чтобы проверить его, и это может привести к ошибке.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...