sqlserver2008 PIVOT列转行

      SELECT
      作業票番号,
         COALESCE(PVT.[1],null) '作業1',
      COALESCE(PVT.[2],null) '作業2',
      COALESCE(PVT.[3],null) '作業3',
      COALESCE(PVT.[4],null) '作業4',
      COALESCE(PVT.[5],null) '作業5'
      FROM
     (
      SELECT
         ROW_NUMBER() OVER(PARTITION BY VT.作業票番号 ORDER BY VD.作業場所) NUM,
         VT.作業票番号 AS 作業票番号,
         VD.作業場所 AS 作業場所
            FROM
         VTプロダクションコントロール AS VT
            INNER JOIN (
      SELECT
    VT工程.作業票番号,
    VT工程.作業場所
      FROM
    VTプロダクションコントロール工程 AS VT工程
      WHERE EXISTS (SELECT 作業票番号
        FROM VTプロダクションコントロール工程
        WHERE VT工程.作業票番号=VTプロダクションコントロール工程.作業票番号
        AND 作業場所 IN('24'))
          ) AS VD
         ON VT.作業票番号=VD.作業票番号
       ) AS V作業場所
       
 PIVOT(MIN(作業場所) FOR NUM IN ([1], [2], [3], [4], [5])) AS PVT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 SQL Server 2008 中,可以使用 PIVOT 和 UNPIVOT 这两个关键字来实现列转行和行转列。 列转行: 假设你有一个 Employee 表,其中包含了员工的姓名、工资和工作部门: |姓名|工资|部门| |---|---|---| |张三|5000|销售| |李四|6000|人力| |王五|7000|技术| 现在你想将部门作为列,将工资作为值,将每个员工的工资转换为部门工资汇总,可以使用 PIVOT 实现: ```sql SELECT * FROM ( SELECT name, salary, department FROM Employee ) AS SourceTable PIVOT ( SUM(salary) FOR department IN ([销售], [人力], [技术]) ) AS PivotTable; ``` 执行这个 SQL 查询语句,会得到以下结果: |姓名|销售|人力|技术| |---|---|---|---| |张三|5000|null|null| |李四|null|6000|null| |王五|null|null|7000| 可以看到,每个部门的工资汇总都被转换成了列,每个员工的工资则被放置在相应的列下面。 行转列: 假设你有一个 Orders 表,其中包含了订单号、客户姓名、订单日期和订单金额: |订单号|客户姓名|订单日期|订单金额| |---|---|---|---| |1|张三|2021-01-01|200| |2|张三|2021-01-02|300| |3|李四|2021-01-03|400| |4|李四|2021-01-04|500| 现在你想将客户姓名作为列,将订单日期作为行,将订单金额作为值,可以使用 UNPIVOT 实现: ```sql SELECT * FROM ( SELECT order_no, customer_name, order_date, order_amount FROM Orders ) AS SourceTable UNPIVOT ( order_amount FOR order_date IN ([2021-01-01], [2021-01-02], [2021-01-03], [2021-01-04]) ) AS UnpivotTable; ``` 执行这个 SQL 查询语句,会得到以下结果: |订单号|客户姓名|order_date|order_amount| |---|---|---|---| |1|张三|2021-01-01|200| |2|张三|2021-01-02|300| |3|李四|2021-01-03|400| |4|李四|2021-01-04|500| 可以看到,客户姓名被转换为列,订单日期被转换为行,订单金额被放置在相应的行列位置上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值