我如何在sql中垂直而不是水平显示字段

问题描述 投票:1回答:4

我有这个查询

 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

我查看了透视图,但是由于我没有对任何列求和,所以无法弄清楚该怎么做。

sql sql-server-2008-r2 unpivot
4个回答
2
投票

您可以使用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

2
投票

您可以使用工会做某事。

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

0
投票

您也可以使用此技巧仅解决特定名称

这也是处理此类问题的一种逻辑,但这是冗长的代码

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'
© www.soinside.com 2019 - 2024. All rights reserved.