如何在sql中垂直而不是水平显示字段
Posted
技术标签:
【中文标题】如何在sql中垂直而不是水平显示字段【英文标题】:How do I display fields in sql vertically instead of horizontally 【发布时间】:2014-04-03 18:17:38 【问题描述】:我有这个问题
select
raw_item_no,
raw_item_no_2,
raw_item_no_3,
raw_item_no_4
from jtjobfil_sql
where job_no = 213418
这样的输出
raw_item_no raw_item_no_2 raw_item_no_3 raw_item_no_4
23 24 25 26
如何让输出看起来像这样
raw_item_nos
23
24
25
26
我查看了枢轴,但我不知道如何执行此操作,因为我没有对任何列求和。
【问题讨论】:
你需要PIVOT
而不是UNPIVOT
- technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
【参考方案1】:
你可以使用CROSS APPLY
:
SELECT x.raw_item_nos
FROM jtjobfil_sql t
CROSS APPLY
(
VALUES
(t.raw_item_no),
(t.raw_item_no_2),
(t.raw_item_no_3),
(t.raw_item_no_4)
) X (raw_item_nos)
WHERE job_no = 213418;
【讨论】:
【参考方案2】:在您的情况下,您只需要UNPIVOT
和列列表。
查询很简单
SELECT P AS raw_item_no
FROM (
SELECT raw_item_no
,raw_item_no_2
,raw_item_no_3
,raw_item_no_4
FROM jtjobfil_sql
WHERE job_no = 213418
) p UNPIVOT ( p FOR value IN ( raw_item_no, raw_item_no_2, raw_item_no_3, raw_item_no_4 ) ) AS unvpt
这里是UNPIVOT
的示例数据和示例
DECLARE @table TABLE
(
raw_item_no INT
,raw_item_no_2 INT
,raw_item_no_3 INT
,raw_item_no_4 INT
)
INSERT INTO @table
VALUES ( 23, 24, 25, 26 )
SELECT P AS raw_item_no
FROM (
SELECT raw_item_no
,raw_item_no_2
,raw_item_no_3
,raw_item_no_4
FROM @table
) p UNPIVOT ( p FOR value IN ( raw_item_no, raw_item_no_2, raw_item_no_3, raw_item_no_4 ) ) AS unvpt
【讨论】:
【参考方案3】:你可以使用联合来做某事。
with my_query (column1, column2, column3)
as
(
SELECT column1, column2, column3
FROM my_table
where id = 1
)
SELECT column1 FROM my_query
UNION
SELECT column2 FROM my_query
UNION
SELECT column3 FROM my_query
【讨论】:
【参考方案4】:你也可以使用这个技巧来解决特定的名字
这也是处理此类问题的一种逻辑,但这是非常冗长的代码
SELECT substr(ename,1,1) FROM employees WHERE ENAME='JAMES'
UNION ALL
select substr(ename,2,1) from employees WHERE ENAME= 'JAMES'
UNION ALL
select substr(ename,3,1) from employees WHERE ENAME= 'JAMES'
UNION ALL
select substr(ename,4,1) from employees WHERE ENAME= 'JAMES'
UNION ALL
select substr(ename,5,1) from employees WHERE ENAME= 'JAMES'
【讨论】:
以上是关于如何在sql中垂直而不是水平显示字段的主要内容,如果未能解决你的问题,请参考以下文章
如何仅使用 CSS 使 HTML 列表水平显示而不是垂直显示?
如何使用 SpriteKit 使球仅垂直弹跳而不是水平弹跳?
使用 MS SQL Server 中的 Group by 字段将垂直 sql 结果转换为水平输出