首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在子查询中包装透视变换并为其命名

在子查询中包装透视变换并为其命名
EN

Stack Overflow用户
提问于 2017-10-24 03:36:25
回答 2查看 208关注 0票数 0

我正在尝试为一个客户端创建一个变通方法,它要求我在SQL中做一个行到列的透视转换,然后通过一个子查询访问这个数据。

我们有一个基于CTE的解决方案,我们认为它可以工作,但是我们必须将这个查询插入到shell查询中才能与我们系统的UI一起使用,而CTE解决方案是不可行的。

然而,我们知道,如果我们可以通过嵌套子查询访问透视转换后的数据,那么应该可以工作。

下面是一个轴心变换的工作示例,并尝试对子查询/别名解决方案进行代码,我们希望在以后的连接中可以使用它。

代码语言:javascript
复制
-- 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

这个尝试的代码不起作用,但应该会显示我们正在尝试做的事情。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2017-10-24 03:49:21

它只需要一个像AS T这样的别名

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-10-24 04:48:34

我认为您只需要为整个查询添加别名。下面的示例展示了如何将子查询连接回testData,例如:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46897190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档