我正在尝试为一个客户端创建一个变通方法,它要求我在SQL中做一个行到列的透视转换,然后通过一个子查询访问这个数据。
我们有一个基于CTE的解决方案,我们认为它可以工作,但是我们必须将这个查询插入到shell查询中才能与我们系统的UI一起使用,而CTE解决方案是不可行的。
然而,我们知道,如果我们可以通过嵌套子查询访问透视转换后的数据,那么应该可以工作。
下面是一个轴心变换的工作示例,并尝试对子查询/别名解决方案进行代码,我们希望在以后的连接中可以使用它。
-- create the test data
create table #testData
(
PK int,
DayID DateTime,
ReferenceCategorical VarChar(50),
Value numeric
)
Insert Into #testData(PK, DayID, ReferenceCategorical, Value) VALUES (1,
'2017-10-1', 'Red', 1516)
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (2,
'2017-10-1', 'Blue', 1776)
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (3,
'2017-10-1','Green', 1733)
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (4,
'2017-10-2', 'Red', 1439)
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (5,
'2017-10-2', 'Blue', 1882)
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (6,
'2017-10-2', 'Green', 1372)
-- the rows to columns tranformation
select DayID, [Red] ,[Blue], [Green]
FROM (select * from #testData) og
PIVOT(
max(Value)
FOR ReferenceCategorical in ([Red] ,[Blue], [Green] )
) pvt这个尝试的代码不起作用,但应该会显示我们正在尝试做的事情。
select * from
( select DayID, [Red] ,[Blue], [Green]
FROM (select DayID, ReferenceCategorical, Value from #testData) og
PIVOT(
max(Value)
FOR ReferenceCategorical in ([Red] ,[Blue], [Green] )
) pvt)发布于 2017-10-24 03:49:21
它只需要一个像AS T这样的别名
select * from
( select DayID, [Red] ,[Blue], [Green]
FROM (select DayID, ReferenceCategorical, Value from #testData) og
PIVOT(
max(Value)
FOR ReferenceCategorical in ([Red] ,[Blue], [Green] )
) pvt) AS T发布于 2017-10-24 04:48:34
我认为您只需要为整个查询添加别名。下面的示例展示了如何将子查询连接回testData,例如:
SELECT DISTINCT #testData.dayID as main_query, sub.*
FROM #testData
INNER JOIN
(select DayID, [Red] ,[Blue], [Green]
FROM (select * from #testData) og
PIVOT(
max(Value)
FOR ReferenceCategorical in ([Red] ,[Blue], [Green] )
) pvt) sub
ON #testData.dayID = sub.dayID可在此处获得:http://rextester.com/RCW4104
https://stackoverflow.com/questions/46897190
复制相似问题