我正在尝试获取MCW_NM列的STDEV,但我希望它成为BLADEID每个组中所有行非的STDEV。但是在Variance_Blade_MCW中,我需要将其按BLADEID分组。我已经尝试过over(),但出现此错误:
在选择列表中,列'ENG.DBO.MCW_BCL_WEDGE.MCW_NM'无效,因为该列未包含在聚合函数或GROUP BY子句中。
有人可以帮助我吗?以下是我的查询。
PS :我在解释问题时遇到困难,请耐心等待。让我知道您是否有疑问!非常感谢!
SELECT
BladeID,
Total_Sigma_MCW = STDEV(MCW_NM) OVER (),
CountD_Blade = COUNT(BLADEID) OVER (),
Variance_Blade_MCW = SQUARE(STDEV(MCW_NM))
FROM
ENG.DBO.MCW_BCL_WEDGE
WHERE
TESTDATE > GETDATE() - 6
GROUP BY
BLADEID
HAVING
COUNT(BladeID) >= 5000
答案 0 :(得分:0)
我目前无法访问mssql,但这可能有用。内部查询为每个BladeID返回1行,我认为是您想要的集合。问题在于,窗口函数总是为源代码中的每一行返回1行,因此外部查询将其扁平化。
SELECT DISTINCT
BladeID,
Total_Sigma_MCW = STDEV(MCW_NM) OVER (PARTITION BY 1),
Variance_Blade_MCW,
CountD_Blade,
FROM
(
SELECT
BladeID,
MCW_NM,
CountD_Blade = COUNT() OVER (PARTITION BY BladeID),
Variance_Blade_MCW = SQUARE(STDEV(MCW_NM) OVER (PARTITION BY BLADEID))
FROM
ENG.DBO.MCW_BCL_WEDGE
WHERE
TESTDATE > GETDATE() - 6
) q
WHERE CountD_Blade >= 5000
创建两个查询可能更有效,一个查询按BladeID分组,另一个查询整个数据集并将其联接。