Tsql 无法对SSMS中包含聚合或子查询的表达式执行聚合函数

Tsql 无法对SSMS中包含聚合或子查询的表达式执行聚合函数,tsql,sql-server-2012,Tsql,Sql Server 2012,我正在尝试在SQL Server Management Studio 2012中运行以下代码: SELECT ib.IFLOC AS Location, ib.IFITEM AS KitPart, im.ICDSC1 AS KitPart_Description, kd.ILCMPN AS ComponentPart, ib.IFPRVN AS Vendor, ib.IFSTK AS Stock, ib.IFLRD AS Last_Rece

我正在尝试在SQL Server Management Studio 2012中运行以下代码:

SELECT
    ib.IFLOC AS Location,
    ib.IFITEM AS KitPart,
    im.ICDSC1 AS KitPart_Description,
    kd.ILCMPN AS ComponentPart,
    ib.IFPRVN AS Vendor,
    ib.IFSTK AS Stock,
    ib.IFLRD AS Last_Receipt_Date, 
    ib.IFLEAD AS Lead_Time,
    vn.ACBUYR AS Buyer,
    iv.IGMORD AS MOQ,
    SUM(ib.IFQOH) AS QOH,
    SUM(ib.IFQPO) AS QOO, 
    SUM(ib.IFQCM) AS QCM,
    SUM(ib.IFQBO) AS QBO,
    CAST(ISNULL(SUM(CASE WHEN sd.SBINDT > DateAdd(day, - 30, GetDate()) THEN sd.SBQSHP ELSE 0 END), 0) AS DECIMAL(8, 2)) AS Last_30_Days, 
    CAST(ISNULL(SUM(CASE WHEN sd.SBINDT BETWEEN DateAdd(day, - 60, GetDate()) AND DateAdd(day, - 31, GetDate()) THEN sd.SBQSHP ELSE 0 END), 0) AS DECIMAL(8, 2)) AS Thirty1_to_60_Days,
    CAST(ISNULL(SUM(CASE WHEN sd.SBINDT BETWEEN DateAdd(day, - 90, GetDate()) AND DateAdd(day, - 61, GetDate()) THEN sd.SBQSHP ELSE 0 END), 0) AS DECIMAL(8, 2)) AS Sixty1_to_90_Days, 
    CAST(ISNULL(SUM(CASE WHEN sd.SBINDT > DateAdd(day, - 90, GetDate()) THEN sd.SBQSHP ELSE 0 END), 0) AS DECIMAL(6, 2)) AS L90, 
    CAST(ISNULL(SUM(CASE WHEN sd.SBINDT BETWEEN DateAdd(day, - 120, GetDate()) AND DateAdd(day, - 91, GetDate()) THEN sd.SBQSHP ELSE 0 END), 0) AS DECIMAL(8, 2)) AS Ninety1_to_120_Days,
    CAST(ISNULL(SUM(CASE WHEN sd.SBINDT > DateAdd(day, - 365, GetDate()) THEN sd.SBQSHP ELSE 0 END), 0) AS DECIMAL(8, 2)) AS Last_12_Months,
    SUM(ib.IFQOH - ib.IFQCM) AS Available, 
    CAST(ROUND(SUM(CAST(ISNULL(SUM(CASE WHEN sd.SBINDT > DateAdd(day, - 90, GetDate()) THEN sd.SBQSHP ELSE 0 END), 0) AS DECIMAL(6, 2)) / 12), 2) AS NUMERIC(8, 2)) AS 'Three_Mo_wkly_Avg',
    CAST(ROUND(SUM(CAST(ISNULL(SUM(CASE WHEN sd.SBINDT > DateAdd(day, - 365, GetDate()) THEN sd.SBQSHP ELSE 0 END), 0) AS DECIMAL(8, 2)) / 52), 2) AS NUMERIC(8, 2)) AS 'L12Mo_wkly_Avg',
    CASE WHEN tm.Part IS NOT NULL THEN 'Y' ELSE 'N' END AS TopMover,
    CASE WHEN irl.Part IS NOT NULL THEN 'Y' ELSE 'N' END AS IRL,
    CASE WHEN csl.Part IS NOT NULL THEN 'Y' ELSE 'N' END AS CSL,
    CASE WHEN sgc.Part IS NOT NULL THEN 'Y' ELSE 'N' END AS SGC,
    SUM(CASE WHEN po.PBDUE < CAST(GETDATE() AS DATE) THEN po.PBDQTY ELSE 0 END) AS PastDue,
    SUM(CASE WHEN po.PACONF LIKE '%CONF%' AND po.PBDUE >= CAST(GETDATE() AS DATE) AND po.PBDUE <> '2049-12-31' THEN po.PBDQTY ELSE 0 END) AS Confirmed, 
    SUM(CASE WHEN po.PACONF NOT LIKE '%CONF%' AND po.PBDUE >= CAST(GETDATE() AS DATE) THEN po.PBDQTY WHEN po.PBDUE = '2049-12-31' THEN po.PBDQTY ELSE 0 END) AS Unconfirmed
FROM
    S2K_IB AS ib
    LEFT OUTER JOIN
    S2K_IM AS im ON im.ICITEM = ib.IFITEM
    LEFT OUTER JOIN
    SalesData sd ON sd.SBITEM = ib.IFITEM AND sd.DefaultLocation = ib.IFLOC AND sd.SBTYPE = 'O'
    LEFT OUTER JOIN
    TopMovers tm ON tm.Part = ib.IFITEM
    LEFT OUTER JOIN
    IRL irl ON irl.Part = ib.IFITEM
    LEFT OUTER JOIN
    SpringGapCloser sgc ON sgc.Part = ib.IFITEM
    LEFT OUTER JOIN
    NewCSL csl ON csl.Part = ib.IFITEM
    LEFT OUTER JOIN
    PurchaseOrders po ON po.PBITEM = ib.IFITEM AND po.PBLOC = ib.IFLOC AND po.PBTYPE NOT IN ('D', 'R') AND po.PASTAT <> 'X' AND po.PBUSER <> 'MDALTON'
    LEFT OUTER JOIN
    S2K_IV iv ON iv.IGITEM = ib.IFITEM AND iv.IGLOC = ib.IFLOC AND iv.IGVND = ib.IFPRVN
    LEFT OUTER JOIN
    S2K_VEND vn ON vn.ACVEND = ib.IFPRVN
    INNER JOIN
    KitData kd ON kd.ILASSM = ib.IFITEM AND kd.ILLOC = ib.IFLOC
GROUP BY
    ib.IFLOC,
    ib.IFITEM,
    im.ICDSC1,
    kd.ILCMPN, 
    ib.IFPRVN,
    ib.IFSTK,
    ib.IFLRD, 
    ib.IFLEAD,
    vn.ACBUYR,
    iv.IGMORD,
    tm.Part,
    irl.Part,
    csl.Part,
    sgc.Part
ORDER BY
    KitPart,
    Location
无法对包含聚合或子查询的表达式执行聚合函数


如何重写此代码才能正常工作?

如果您不发布整个查询,则无法帮助您必须将其分解,这是它抱怨的一个总和。无论如何都值得去做,因为它现在的形式几乎是不可理解的。选择X,从选择X1选择Sumy,从其他地方选择SumZ dummyQuery internal join anotherthing on anotherthing.X=dummyQuery.X1 Group by X是您应该查看的格式。我最初将其作为两个单独的查询使用。当sd.SBINDT>DateAddday,-90,GetDate,然后sd.SBQSHP ELSE 0结束,0为小数点6,2为L90,然后CASTROUNDSUMb.L90/12,2作为数字8,2作为“三个月平均值”,当你把这个交给维修部时,去做一个完全的身份改变,因为如果他们发现你,那就不好看了:。如果是我的话,我会一点一点地做这件事,当管理层出现并想要玩弄它时,他们不会喜欢这个估计。我是管理层,我是唯一会玩弄它的人。我只是做了一个子查询,并以这种方式处理它。
CAST(ROUND(SUM(CAST(ISNULL(SUM(CASE WHEN sd.SBINDT > DateAdd(day, - 90, GetDate()) THEN sd.SBQSHP ELSE 0 END), 0) AS DECIMAL(6, 2)) / 12), 2) AS NUMERIC(8, 2)) AS 'Three_Mo_wkly_Avg'