将某些列反透视到特定行

Unpivot certain columns to certain row

我有一个 table 结构如下:

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'

我怀疑您只是想对值进行逆透视。我不确定最后一列是什么,但基本思路是:

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

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

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

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

这是一些非常奇怪的逻辑,但是,这似乎就是您所追求的。不过,我更喜欢使用 VALUES table 构造,而不是更具限制性的 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;