如果我有一个看起来像这样的表:
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
如果 1,2,3 不为空,它们将只是 SELECT 语句中的更多行,其中所有其他数据保持不变。
关于如何使用最少的代码来解决这个问题有什么建议吗?最好是一个 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
您也可以使用交叉连接和几个 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)
关于sql - 如何将列变成行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701404/