Tho*_*mas 1 sql-server ms-access pivot transform crosstab
我在访问中有以下表(odbc链接到实际的mssql表)

我可以创建表的交叉表查询,将其转换为此格式

这是访问中生成的sql:
TRANSFORM First(dbo_85137_PHY_Long_MP.[StatColumnValue]) AS FirstOfStatColumnValue
SELECT dbo_85137_PHY_Long_MP.[StatDate]
FROM dbo_85137_PHY_Long_MP
GROUP BY dbo_85137_PHY_Long_MP.[StatDate]
PIVOT dbo_85137_PHY_Long_MP.[StatColumnName];
Run Code Online (Sandbox Code Playgroud)
我试图在mssql中创建相同的sql无济于事(尝试创建一个视图)
由于您使用的是SQL Server,因此您需要使用PIVOT运算符.您可以通过静态PIVOT或动态PIVOT两种方式完成此操作.
一个静态PIVOT,意味着你会为每一个你需要旋转列代码.因为看起来你有很多专栏我怀疑你会想要这样做.但代码与此类似:
create table t1
(
statno int,
statdate datetime,
statcolumnname varchar(50),
statcolumnvalue int
)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP00-1MA', 17)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP01-1MA', 18)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP02-1MA', 18)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP03-1MA', 18)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1ME.MP10-1ME', 26)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1ME.MP11-1ME', 2)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1ME.MP12-1ME', 2)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP08-2MC', 2)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP09-2MC', 22)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP0A-2MC', 22)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP0B-2MC', 22)
select *
from
(
select statdate, statcolumnname, statcolumnvalue
from t1
) x
pivot
(
min(statcolumnvalue)
for statcolumnname in ([MPB-1MA.MP00-1MA], [MPB-1MA.MP01-1MA], [MPB-1MA.MP02-1MA])
) p
Run Code Online (Sandbox Code Playgroud)
这是一个带有工作示例的SQL小提琴.
如果你有很多专栏,这将非常麻烦.因此,您还可以使用Dynamic Pivot,它将生成在运行查询时要旋转的列列表.这是代码:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.statcolumnname)
FROM t1 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT statdate, ' + @cols + ' from
(
select statdate, statcolumnname, statcolumnvalue
from t1
) x
pivot
(
min(statcolumnvalue)
for statcolumnname in (' + @cols + ')
) p '
execute(@query)
Run Code Online (Sandbox Code Playgroud)
它们都会给你相同的结果.
| 归档时间: |
|
| 查看次数: |
2927 次 |
| 最近记录: |