【问题标题】:How do I display fields in sql vertically instead of horizontally如何在sql中垂直而不是水平显示字段
【发布时间】: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

我查看了枢轴,但我不知道如何执行此操作,因为我没有对任何列求和。

【问题讨论】:

标签: sql sql-server-2008-r2 unpivot


【解决方案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'
        

        【讨论】:

          猜你喜欢
          • 2021-10-03
          • 1970-01-01
          • 1970-01-01
          • 2021-01-18
          • 2020-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多