【发布时间】:2020-06-03 13:38:42
【问题描述】:
我正在重新发布此内容并添加其他信息。我正在处理 SQL 查询并使用 Pivot 并遇到问题。我在数据透视表中的列实际上显示为行数据,并为每个服务器重复。
WITH agg AS
(
select NodeID,
count(distinct cpuindex) as number_of_cpu,
case
when count(distinct cpuindex) < 8 THEN 1
else count(distinct cpuindex) / 8
end AS number_of_cores
from CPUMultiLoad_Detail
where nodeid in (select nodeid from nodesdata)
group by NodeID
)
SELECT * FROM (
SELECT cp.Environment, n.Caption,
cs.ComponentName,cs.ComponentStatisticData, cs.ErrorMessage,
agg.NodeID, agg.number_of_cpu, agg.number_of_cores, n.description
FROM APM_CurrentStatistics cs
INNER JOIN APM_Application app
ON cs.ApplicationID = app.ID
AND app.Name IN ('Oracle Database Licensing')
INNER JOIN NodesData n
ON cs.NodeID = n.NodeID
AND n.description NOT LIKE '%Windows%'
INNER JOIN NodesCustomProperties cp
ON cp.NodeID = n.NodeID
INNER JOIN agg
ON cs.NodeID = agg.NodeID
) t
PIVOT(
max(cs.ErrorMessage) FOR cs.ComponentName IN (
[Oracle Version],
[Oracle Partitioning],
[Oracle Tuning Pack],
[Diagnostic Pack],
[Real Application Clusters (RAC)])
) AS pivot_table;
期望的输出
我收到此错误 消息 107,第 15 级,状态 1,第 30 行 列前缀“cs”与查询中使用的表名或别名不匹配。 消息 107,第 15 级,状态 1,第 30 行 列前缀“cs”与查询中使用的表名或别名不匹配。
任何帮助将不胜感激。
【问题讨论】:
-
你用的是什么数据库?任何示例数据或 DDL 命令都会有所帮助。看起来您需要 max(ErrorMessage) FOR ComponentName 因为 cs 的范围仅在没有创建别名为表 t 的主查询之前。
标签: sql pivot pivot-table