Как превратить колонны в ряды - PullRequest
2 голосов
/ 09 октября 2011

Если у меня есть таблица, которая выглядит следующим образом:

    ID int
    Name varchar
    City1 varchar
    City2 varchar
    City3 varchar
    State1 varchar
    State2 varchar
    State3 varchar

Я понимаю, что в обычном операторе SELECT будут возвращаться такие данные:

    ID, Name, City1, City2, City3, State1, State2, State3

Но как мне вернуть инструкцию SELECT, чтобы вернуть несколько городов / штатов в разные строки и сгруппировать их ... Так это выглядит так:

    ID, Name, City, State

И вместо этих столбцов: Color1, Color2, Color3 и State1, State2, State3

В операторе SELECT было бы больше строк, где все остальные данные остались бы прежними, если 1,2,3 не равно нулю.

Есть предложения о том, как подойти к этому, используя наименьшее количество кода? Предпочтительно один оператор SELECT, который обрабатывает все это?

1 Ответ

6 голосов
/ 09 октября 2011

Вы можете запросить вашу таблицу три раза и использовать union all для объединения результата.

select ID, Name, City1 as City, State1 as State
from YourTable
union all
select ID, Name, City2, State2
from YourTable
union all
select ID, Name, City3, State3
from YourTable

Вы также можете сделать это в одном запросе, используя перекрестное соединение и пару операторов case.

select ID, 
       Name,
       case T.N 
         when 1 then City1
         when 2 then City2
         when 3 then City3
       end as City,
       case T.N 
         when 1 then State1
         when 2 then State2
         when 3 then State3
       end as State
from YourTable
  cross join (values(1),(2),(3)) as T(N)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...