Con*_*eak 2 sql t-sql sql-server pivot sql-server-2008
如果我有一个看起来像这样的表:
ID int
Name varchar
City1 varchar
City2 varchar
City3 varchar
State1 varchar
State2 varchar
State3 varchar
Run Code Online (Sandbox Code Playgroud)
我理解一个普通的SELECT语句,它将返回如下数据:
ID, Name, City1, City2, City3, State1, State2, State3
Run Code Online (Sandbox Code Playgroud)
但是我如何返回SELECT语句以将多个City/State返回到不同的行,并将它们分组......所以它看起来像这样:
ID, Name, City, State
Run Code Online (Sandbox Code Playgroud)
而不是这些列:Color1,Color2,Color3和State1,State2,State3
它们只是SELECT语句中的更多行,其中所有其他数据保持不变,如果1,2,3不是空的.
有关如何使用最少量的代码处理此问题的任何建议?最好是一个处理这一切的SELECT语句?
您可以查询您的表三次,并用于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
Run Code Online (Sandbox Code Playgroud)
您也可以使用交叉连接和几个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)
Run Code Online (Sandbox Code Playgroud)