【问题标题】:Unpivot certain columns to certain row将某些列取消旋转到某些行
【发布时间】:2021-04-08 10:39:36
【问题描述】:

我有一个结构如下的表:

ID UID C304 C305 C304_Value C305_Value
1 1225 86 01 15 99
2 1226 89 06 10 15

我希望输出类似于

ID UID Col Col_Value Value
1 1225 C304 86 99
1 1225 C305 89 15

我尝试过 unpivot,但它会复制每一行的列。

有没有办法做到这一点?

这是我的 SQL:

SELECT UID, Col, Col_Value,
C304_Value, C305_Value
--,*
FROM Input
--Unpivot(  Field_Values    
--              for field IN ([dfdf])) as PVT
unpivot (
Col_Value
for Col in (C304, C305)
) up
where UID = '1225'

【问题讨论】:

  • 请解释逻辑。例如,UID 1226 发生了什么?
  • 我刚刚在 where 子句中过滤掉了它
  • 那么如何从第二行获取值呢?
  • Valueother 列的值吗?因此对于col 的值为'C304' 的行,Col_Value 的值是C304_Value 的值,ValueC305_Value 的值,但当col 具有C305? 的值
  • @Larnu - 这是正确的

标签: sql sql-server unpivot


【解决方案1】:

我怀疑您只是想取消透视这些值。我不确定最后一列是什么,但基本思路是:

select t.id, t.uid, v.*
from t cross apply
     (values ('C304', C304),
             ('C305', C305)
     ) v(col, col_value);

这不会返回您指定的结果,但我认为这是您想要做的。

如果最后一列只是“其他”值,您也可以将其包括在内:

select t.id, t.uid, v.*
from t cross apply
     (values ('C304', C304, C305),
             ('C305', C305, C304)
     ) v(col, col_value, other_value);
         

【讨论】:

    【解决方案2】:

    这是一些非常奇怪的逻辑,但是,这似乎是您所追求的。我更喜欢使用VALUES 表结构而不是更严格的UNPIVOT 运算符:

    CREATE TABLE dbo.YourTable (ID int,
                                UID int,
                                C304 int,
                                C305 int,
                                C304_Value int,
                                C305_Value int);
    GO
    INSERT INTO dbo.YourTable 
    VALUES(1,1225,86,01,15,99),
          (2,1226,89,06,10,15);
    GO
    
    SELECT *
    FROM dbo.YourTable;
    GO
    
    SELECT YT.ID,
           YT.UID,
           V.Col,
           V.Col_Value,
           V.[Value]
    FROM dbo.YourTable YT
         CROSS APPLY (VALUES(N'C304',YT.C304_Value,YT.C305_Value),
                            (N'C305',YT.C305_Value,YT.C304_Value))V(Col,Col_Value,[Value])
    WHERE YT.ID = 1;
    
    GO
    DROP TABLE dbo.YourTable;
    

    【讨论】:

      猜你喜欢
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      相关资源
      最近更新 更多