如果我的表格如下:
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语句以将多个City / State返回到不同的行,并将它们分组......所以它看起来像这样:
ID, Name, City, State
而不是这些列:Color1,Color2,Color3和State1,State2,State3
如果1,2,3不是空的话,它们只是SELECT语句中的更多行,其中所有其他数据保持不变。
有关如何使用最少量的代码处理此问题的任何建议?最好是一个处理这一切的SELECT语句吗?
答案 0 :(得分:6)
您可以三次查询您的表格并使用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
您也可以使用交叉连接和几个案例陈述在一个查询中执行此操作。
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)