PIVOT 在多列 SQL 服务器上(Aspen 中继数据库)
PIVOT on multiple columns SQL server (Aspen Relay Database)
我正在使用供应商提供的中继数据库 (Aspen),它是 运行 在 MS SQL 服务器上)。我正在尝试编写一个需要在 2 列上进行数据透视的数据透视查询。
我创建了一个临时文件 table,因为数据跨越多个 table。
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全部来自Temp returns 38行数据,这里显示一个子集:
RID -----SGROUPNAME------TSETTINGNAME-------SSETTING
31297 LOAD1 ENABLE TRUE
31297 LOAD1 ANGLE 60
31297 LOAD2 CALCULATED_LOAD 12269
ETC....
我添加了这个枢轴,这让我很接近:
PIVOT (MAX(SSETTING) FOR TSETTINGNAME IN (ENABLE, REACH, ANGLE, CALCULATED_LOADABILITY, ZLE, CTR, PTR, KVNOM, PICKUP, PERCENTAGE)) P
Pivot 的返回结果:
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 等。都是headers.
我已经尝试了多个枢轴和交叉应用,但我似乎无法正确显示数据。
如果有任何不清楚的地方或您需要更多信息,请告诉我。任何帮助将不胜感激。
谢谢,
乔 C.
使用一堆 case 语句和一组 RID 可能会更容易。顺便说一句,这是实现 PIVOT 之前的 "original" 旋转方法。
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:
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 仅用于聚合——您应该只聚合一条记录。
我正在使用供应商提供的中继数据库 (Aspen),它是 运行 在 MS SQL 服务器上)。我正在尝试编写一个需要在 2 列上进行数据透视的数据透视查询。
我创建了一个临时文件 table,因为数据跨越多个 table。
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全部来自Temp returns 38行数据,这里显示一个子集:
RID -----SGROUPNAME------TSETTINGNAME-------SSETTING
31297 LOAD1 ENABLE TRUE
31297 LOAD1 ANGLE 60
31297 LOAD2 CALCULATED_LOAD 12269
ETC....
我添加了这个枢轴,这让我很接近:
PIVOT (MAX(SSETTING) FOR TSETTINGNAME IN (ENABLE, REACH, ANGLE, CALCULATED_LOADABILITY, ZLE, CTR, PTR, KVNOM, PICKUP, PERCENTAGE)) P
Pivot 的返回结果:
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 等。都是headers.
我已经尝试了多个枢轴和交叉应用,但我似乎无法正确显示数据。
如果有任何不清楚的地方或您需要更多信息,请告诉我。任何帮助将不胜感激。
谢谢, 乔 C.
使用一堆 case 语句和一组 RID 可能会更容易。顺便说一句,这是实现 PIVOT 之前的 "original" 旋转方法。
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:
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 仅用于聚合——您应该只聚合一条记录。