Sql 列';dbo.mdSpaceSales.wkid';在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

Sql 列';dbo.mdSpaceSales.wkid';在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我得到了以下查询的上述错误: SELECT a.stid, a.pfid, pf.pfname, a.mdid, mm.mdDescription, a.categoryid, a.SummedSpace, a.AvgSpace, mm.size_sqft as MML_size, a.TotalRev, a.TotalProfit, a.wkCount, a.Lastwkinst FROM (SELECT wkid, stid, mdid, pfid

我得到了以下查询的上述错误:

SELECT 
    a.stid, a.pfid, pf.pfname, a.mdid, 
    mm.mdDescription, a.categoryid, a.SummedSpace,
    a.AvgSpace, mm.size_sqft as MML_size, a.TotalRev,
    a.TotalProfit, a.wkCount, a.Lastwkinst 
FROM
   (SELECT wkid, stid, mdid, pfid, categoryid,
           sum([space]) as SummedSpace, avg([space]) as AvgSpace,
           sum(revenue) as TotalRev, sum(profit) as TotalProfit,
           count(wkid) as wkCount, max(wkid) as Lastwkinst
    FROM dbo.mdSpaceSales
    WHERE wkid > 200936 AND categoryid in (25, 16, 62, 4079)
    GROUP BY stid, mdid, pfid, categoryid) AS a
LEFT JOIN mdmasterlist mm ON mm.mdid = a.mdid
LEFT JOIN 
    (SELECT distinct pfid, [pf name] as pfname FROM mdmasterlist) AS pf
       ON pf.pfid = a.pfid
ORDER BY 
    stid, categoryid, a.pfid, a.mdid

有人能帮我解决这个错误吗?

在子查询中,您说:

SELECT wkid,stid,mdid,pfid,categoryid,SUM()... 
group by stid,mdid,pfid,categoryid
我认为需要:

SELECT wkid,stid,mdid,pfid,categoryid,SUM()... 
group by wkid,stid,mdid,pfid,categoryid
否则,您将尝试让SQL Server猜测您希望在选择列表中使用哪个wkid。也许您的目的是不中断每个wkid(因为您似乎没有在外部查询中公开它),在这种情况下,它应该是:

SELECT stid,mdid,pfid,categoryid,SUM()... 
group by stid,mdid,pfid,categoryid

在子查询中,您可以说:

SELECT wkid,stid,mdid,pfid,categoryid,SUM()... 
group by stid,mdid,pfid,categoryid
我认为需要:

SELECT wkid,stid,mdid,pfid,categoryid,SUM()... 
group by wkid,stid,mdid,pfid,categoryid
否则,您将尝试让SQL Server猜测您希望在选择列表中使用哪个wkid。也许您的目的是不中断每个wkid(因为您似乎没有在外部查询中公开它),在这种情况下,它应该是:

SELECT stid,mdid,pfid,categoryid,SUM()... 
group by stid,mdid,pfid,categoryid

内部派生查询:必须分组(折叠)或聚合wkid

您正在尝试两种方法:

选择wkid计数(wkid)max(wkid)按stid、mdid、pfid、类别分组

我怀疑您需要删除第一个wkid,因此:

...
FROM
   (SELECT /*wkid drop me*/, stid, mdid, pfid, categoryid,
           sum([space]) as SummedSpace, avg([space]) as AvgSpace,
           sum(revenue) as TotalRev, sum(profit) as TotalProfit,
           count(wkid) as wkCount, max(wkid) as Lastwkinst
    FROM dbo.mdSpaceSales
    WHERE wkid > 200936 AND categoryid in (25, 16, 62, 4079)
    GROUP BY stid, mdid, pfid, categoryid) AS a
LEFT JOIN
...

聚合的一个简单规则:必须能够用普通语言表达查询。

内部派生查询:必须分组(折叠)或聚合wkid

您正在尝试两种方法:

选择wkid计数(wkid)max(wkid)按stid、mdid、pfid、类别分组

我怀疑您需要删除第一个wkid,因此:

...
FROM
   (SELECT /*wkid drop me*/, stid, mdid, pfid, categoryid,
           sum([space]) as SummedSpace, avg([space]) as AvgSpace,
           sum(revenue) as TotalRev, sum(profit) as TotalProfit,
           count(wkid) as wkCount, max(wkid) as Lastwkinst
    FROM dbo.mdSpaceSales
    WHERE wkid > 200936 AND categoryid in (25, 16, 62, 4079)
    GROUP BY stid, mdid, pfid, categoryid) AS a
LEFT JOIN
...
聚合的一个简单规则:您必须能够用普通语言表达查询