如何在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 结果转换为水平输出

如何启用垂直滚动的滚动条并禁用水平滚动?

如何垂直而不是水平地制作点(graphviz)布局未连接的节点?

如何垂直而不是水平制表符