首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多列SQL server上的透视(Aspen Relay Database)

多列SQL server上的透视(Aspen Relay Database)
EN

Stack Overflow用户
提问于 2018-08-23 19:29:28
回答 1查看 94关注 0票数 0

我使用的是供应商提供的中继数据库(Aspen),它在MS SQL服务器上运行)。我正在尝试编写一个需要在2列上进行透视的透视查询。

我创建了一个临时表,因为数据跨多个表。

代码语言:javascript
复制
WITH TEMP_TABLE AS (
  SELECT 
    R.LOCATIONID LLOCATIONID, R.ID RID, s.groupname SGROUPNAME,t.settingname TSETTINGNAME, s.setting SSETTING
from tsetting1 s
inner join tsettype1 t on t.relaytype=s.relaytype and t.groupname = s.groupname and t.rownumber = s.rownumber
INNER JOIN TREQUEST Q ON S.REQUESTID = Q.ID
INNER JOIN TRELAY R ON R.ID = Q.RELAYID
INNER JOIN TLOCATION L ON L.ID = R.LOCATIONID
where s.requestid=29117
)
select  * from TEMP_TABLE

select all from Temp返回38行数据,其子集如下所示:

代码语言:javascript
复制
RID -----SGROUPNAME------TSETTINGNAME-------SSETTING
31297    LOAD1            ENABLE             TRUE
31297    LOAD1            ANGLE              60
31297    LOAD2            CALCULATED_LOAD    12269
ETC....

我添加了这个轴心,它让我更接近:

代码语言:javascript
复制
PIVOT (MAX(SSETTING) FOR TSETTINGNAME IN (ENABLE, REACH, ANGLE, CALCULATED_LOADABILITY, ZLE, CTR, PTR, KVNOM, PICKUP, PERCENTAGE)) P

Pivot返回结果:

代码语言:javascript
复制
RID-----SGROUPNAME-----ENABLE----REACH----ANGLE----CALCULATED_LOADABILITY
31297   LOAD1          TRUE      15       60       9444
31297   LOAD2          TRUE      10       30       12269
31297   LOAD3          TRUE      20       60       14167
ETC...

我希望RID 31297的数据为1条记录,其中LOAD1-ENABLE,LOAD2-ENABLE,LOAD3-ENABLE,LOAD1-REACH等。都是头文件。

我尝试了多个透视和交叉应用,但似乎无法正确显示数据。

如果有什么不清楚的地方,或者你需要更多信息,请告诉我。任何帮助都将不胜感激。

谢谢你乔·C。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 19:49:01

使用一组case语句和一个group by RID可能更容易。顺便说一句,这是在实现PIVOT之前旋转的“原始”方法。

代码语言:javascript
复制
select RID
   , Load1_Enable = MAX(case when SGROUPNAME = 'Load1' then enable else null end)
   , Load2_Enable = MAX(case when SGROUPNAME = 'Load2' then enable else null end)
from [YourTable]
group by RID

不过,我会一直走到第一个cte:

代码语言:javascript
复制
WITH TEMP_TABLE AS (
  SELECT 
    R.LOCATIONID LLOCATIONID, R.ID RID, s.groupname SGROUPNAME,t.settingname TSETTINGNAME, s.setting SSETTING
from tsetting1 s
inner join tsettype1 t on t.relaytype=s.relaytype and t.groupname = s.groupname and t.rownumber = s.rownumber
INNER JOIN TREQUEST Q ON S.REQUESTID = Q.ID
INNER JOIN TRELAY R ON R.ID = Q.RELAYID
INNER JOIN TLOCATION L ON L.ID = R.LOCATIONID
where s.requestid=29117
)
select RID
    ,Load1_Enable = MAX(case when SGROUPNAME = 'Load1' and TSETTINGNAME = 'Enable' then SSETTING else null end)
from TEMP_TABLE
group by RID

注MAX仅用于聚合--您应该只聚合一条记录。

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

https://stackoverflow.com/questions/51984785

复制
相关文章

相似问题

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