Sql server 如何在sql查询中将多列设置为行
我想使用SQL Server将列转换为行。我已经尝试过unpivot,但是没有足够的知识使它只能成为一列Sql server 如何在sql查询中将多列设置为行,sql-server,pivot,unpivot,Sql Server,Pivot,Unpivot,我想使用SQL Server将列转换为行。我已经尝试过unpivot,但是没有足够的知识使它只能成为一列 SELECT Unit,Excess_Reactivity ,Refuelling_required,MBP,MCP ,CPPF,Date FROM yourTable // select statement //insert to check data INSERT INTO yourTable (Unit,Excess_Reactivity ,Refuelling_requi
SELECT Unit,Excess_Reactivity ,Refuelling_required,MBP,MCP ,CPPF,Date FROM yourTable // select statement
//insert to check data
INSERT INTO yourTable
(Unit,Excess_Reactivity ,Refuelling_required,MBP ,MCP ,CPPF ,Date)
VALUES
('TAP-4','52','test1','12','96','35','2019-06-11 00:00:00.000')
INSERT INTO yourTable
(Unit,Excess_Reactivity ,Refuelling_required,MBP ,MCP ,CPPF ,Date)
VALUES
('TAP-2','52','test1','12','96','35','2019-06-11 00:00:00.000')
INSERT INTO yourTable
(Unit,Excess_Reactivity ,Refuelling_required,MBP ,MCP ,CPPF ,Date)
VALUES
('TAP-3','52','test1','12','96','35','2019-06-11 00:00:00.000')
这是一张桌子
+--------+--------+---------+-----+-----+------+------------+
| UNit | excess | refuell | MBp | MCP | CPPF | DATE |
+--------+--------+---------+-----+-----+------+------------+
| TAPS-4 | 52 | test1 | 12 | 96 | 35 | 11/06/2019 |
| TAPS-3 | 52 | test1 | 13 | 96 | 35 | 11/06/2019 |
| TAPS-2 | 52 | test1 | 42 | 96 | 35 | 11/06/2019 |
| TAPS-1 | 52 | test1 | 18 | 96 | 35 | 11/06/2019 |
+--------+--------+---------+-----+-----+------+------------+
我希望如下所示:
Values TAPS-4 TAPS-3 TAPS-2 TAPS-1
--------------------------------------
excess 52 52 52 52
MBp 12 13 42 18
MCP 96 96 96 96
CPPF 35 35 35 35
- 首先,您需要取消激活表,请注意,您需要将数据转换为相同的类型,因为每个数据都将转到同一列
- 然后你可以转向你想要的结果李>
- 如果需要,将其转换回原始数据类型
WITH unpvt as (
SELECT Unit, Attribute, Vals
FROM ( SELECT Unit,
cast(excess as nvarchar(100)) as excess,
cast(MBp as nvarchar(100)) as MBp,
cast(MCP as nvarchar(100)) as MCP,
cast(CPPF as nvarchar(100)) as CPPF
FROM Table1) as p
UNPIVOT
(Vals FOR Attribute in (excess, MBp, MCP, CPPF)
) as unpvt
)
SELECT Attribute, [TAPS-4], [TAPS-3], [TAPS-2], [TAPS-1]
FROM ( SELECT Unit, Attribute, Vals
FROM unpvt) p
PIVOT (
MAX(Vals) FOR Unit IN
([TAPS-4], [TAPS-3], [TAPS-2], [TAPS-1])
) pvt
输出
| Attribute | TAPS-4 | TAPS-3 | TAPS-2 | TAPS-1 |
|-----------|--------|--------|--------|--------|
| CPPF | 35 | 35 | 35 | 35 |
| excess | 52 | 52 | 52 | 52 |
| MBp | 12 | 13 | 42 | 18 |
| MCP | 96 | 96 | 96 | 96 |
注意:在sql FIDLE中尝试
从unpvt
中选择*以查看中间结果。您需要动态透视还是知道您的值
?为什么要撤消我的格式?是的,需要动态,它收集名称并设置为列,多列数据将设置为行Juan Carlos Oropeza sry添加第一次在stackoverflow中需要很快解决这些问题我不知道您更改的格式您可以再次更改SRI恢复到我的版本您可以立即添加更改Yupz非常感谢我所希望的方式,而且,我可以通过调用其中的函数动态地带来taps-4、taps-3、taps-2值吗?