Столбец dbo.mdSpaceSales.wkid недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY. - PullRequest
0 голосов
/ 16 ноября 2009

Я получаю вышеуказанную ошибку для запроса ниже:

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

Может ли кто-нибудь помочь мне с этой ошибкой?

Ответы [ 2 ]

3 голосов
/ 16 ноября 2009

В подзапросе вы говорите:

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
0 голосов
/ 16 ноября 2009

Внутренний производный запрос: вам нужно либо сгруппировать (свернуть), либо объединить wkid

Вы пытаетесь сделать оба:

SELECT .. wkid .. count (wkid) .. max (wkid) .. GROUP BY stid, mdid, pfid, CategoryID

Я подозреваю, что вам нужно удалить первый 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
...

Простое правило для агрегатов: вы должны быть в состоянии выразить ваш запрос простым языком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...