sql - 将某些列取消旋转到某些行
问题描述
我有一个具有以下结构的表:
ID | 用户标识符 | C304 | C305 | C304_值 | C305_值 |
---|---|---|---|---|---|
1 | 1225 | 86 | 01 | 15 | 99 |
2 | 1226 | 89 | 06 | 10 | 15 |
我希望输出类似于
ID | 用户标识符 | 科尔 | Col_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'
解决方案
这是一些非常奇怪的逻辑,但是,这似乎是您所追求的。我更喜欢使用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;
推荐阅读
- angular - Angular 6 真的很长时间才能刷新
- php - ZF2:如何检查表是否已加入 Select
- python-3.x - 使用 Matplotlib imshow meshgrid 和自定义颜色创建图像
- three.js - 2 three.js 画布不同时渲染
- javascript - 如果条件使用 React Router V4 更改路由
- r - 如何在 R 中的给定数据框中找到每月平均支出?
- sql - 在 SQL 查询中尝试/捕获多个联合
- image - 在八度音阶的 ylabel 中打印带下标的绘图时间距没有错
- sql - SQL 将 varchar 转换为日期
- qt - qmake没有蓝牙