作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有一个看起来像这样的表:
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/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!