我有一个包含以下数据结构和数据的表。
declare @temp table
(
Name nvarchar(500),
Class1 decimal(18,2),
Class1P decimal(18,2),
Class1S decimal(18,2),
Class2 decimal(18,2),
Class2P decimal(18,2),
Class2S decimal(18,2),
Class3 decimal(18,2),
Class3P decimal(18,2),
Class3S decimal(18,2)
)
INSERT INTO @temp
SELECT 'Rahul',101,102,103,201,202,203,301,302,303
现在,它以简单的select语句以这种形式向我显示数据。
但我希望以这种格式显示数据。我知道我必须首先取消数据,然后需要转动数据,但面临与unpiovt和pivot的语法问题。
答案 0 :(得分:3)
您没有指定正在使用的SQL Server版本,但由于您需要取消对列的对,您可以使用CROSS APPLY
。
select
t.Name,
c.Class,
c.Class1P,
c.Class1S
from @temp t
cross apply
(
values
(Class1, Class1P, Class1S),
(Class2, Class2P, Class3S),
(Class3, Class3P, Class3S)
) c (Class, Class1P, Class1S);
见SQL Fiddle with Demo。以上使用SQL Server 2008中提供的VALUES
,如果您使用的是SQL Server 2005,则可以将VALUES
替换为SELECT...UNION ALL
。
答案 1 :(得分:1)
无需转动。只需将3个单独的查询结合在一起......
declare @temp table
(
Name nvarchar(500),
Class1 decimal(18,2),
Class1P decimal(18,2),
Class1S decimal(18,2),
Class2 decimal(18,2),
Class2P decimal(18,2),
Class2S decimal(18,2),
Class3 decimal(18,2),
Class3P decimal(18,2),
Class3S decimal(18,2)
)
INSERT INTO @temp
SELECT 'Rahul',101,102,103,201,202,203,301,302,303
INSERT INTO @temp
SELECT 'Eoin',701,702,703,801,802,803,901,902,903
SELECT Name, Class1 as Class, Class1P as ClassP, Class1S as ClassS FROM @temp
UNION
SELECT Name, Class2, Class2P, Class2S FROM @temp
UNION
SELECT Name, Class3, Class3P, Class3S FROM @temp
返回结果。
Name Class ClassP ClassS
-------------------- --------------------------------------- --------------------------------------- ---------------------------------------
Eoin 701.00 702.00 703.00
Eoin 801.00 802.00 803.00
Eoin 901.00 902.00 903.00
Rahul 101.00 102.00 103.00
Rahul 201.00 202.00 203.00
Rahul 301.00 302.00 303.00