聚合函数或GROUP BY子句中都不包含日期字段

时间:2018-10-28 05:01:00

标签: sql sql-server date group-by aggregate

我正在尝试使用三个联接表来计算“迄今为止的月份”。它总是给我错误“聚合函数或GROUP BY子句中未包含”错误。日期字段为 S.BUS_DAT 我尝试了很多事情,但总是遇到相同的错误。任何建议 这是我使用的代码

SELECT
-- Select from IM_IN
M.ITEM_NO,
M.DESCR,
N.QTY_ON_HND,
M.PRC_1,
N.LST_COST,
N.LST_RECV_DAT,

--Select from IM_ITEM
M.CATEG_COD,
M.ATTR_COD_1,
M.ITEM_VEND_NO,
M.ALT_1_UNIT,
M.ALT_1_NUMER,
M.LST_COST,
count (S.BUS_DAT) AS BUS_DAYS,

**sum (QTY_SOLD) OVER (PARTITION BY Month (S.BUS_DAT))as **MTD****


FROM
dbo.IM_INV N
INNER JOIN dbo.IM_ITEM M
ON
N.ITEM_NO = M.ITEM_NO

INNER JOIN 
dbo.PS_TKT_HIST_LIN S
ON
N.ITEM_NO  = S.ITEM_NO


Group by
M.ITEM_NO,
M.DESCR,
M.ITEM_VEND_NO,
M.CATEG_COD,
M.ATTR_COD_1,
N.QTY_ON_HND,
N.LST_COST,
N.LST_RECV_DAT,
N.LST_SAL_DAT,
M.ALT_1_UNIT,
M.ALT_1_NUMER,
M.PRC_1,
M.LST_COST





Order by M.ITEM_NO

2 个答案:

答案 0 :(得分:0)

也尝试将Month(S.BUS_DAT)包含到group by中:

SELECT
M.ITEM_NO, 
M.DESCR, 
N.QTY_ON_HND, 
M.PRC_1, 
N.LST_COST, 
N.LST_RECV_DAT, 
M.CATEG_COD, 
M.ATTR_COD_1, 
M.ITEM_VEND_NO, 
M.ALT_1_UNIT, 
M.ALT_1_NUMER, 
M.LST_COST, 
COUNT(S.BUS_DAT) AS BUS_DAYS, 
SUM(QTY_SOLD) OVER(PARTITION BY MONTH(S.BUS_DAT)) AS MTD
FROM dbo.IM_INV N
     INNER JOIN dbo.IM_ITEM M ON N.ITEM_NO = M.ITEM_NO
     INNER JOIN dbo.PS_TKT_HIST_LIN S ON N.ITEM_NO = S.ITEM_NO
GROUP BY M.ITEM_NO, 
         M.DESCR, 
         M.ITEM_VEND_NO, 
         M.CATEG_COD, 
         M.ATTR_COD_1, 
         N.QTY_ON_HND, 
         N.LST_COST, 
         N.LST_RECV_DAT, 
         N.LST_SAL_DAT, 
         M.ALT_1_UNIT, 
         M.ALT_1_NUMER, 
         M.PRC_1, 
         M.LST_COST, 
         MONTH(S.BUS_DAT)
ORDER BY M.ITEM_NO;

答案 1 :(得分:0)

我相信你想要

sum(sum(QTY_SOLD)) OVER (PARTITION BY Month(S.BUS_DAT)) as MTD

注意:month(s.bus_dat)子句中仍然需要group by

如果您只想要当月的总和,那么您就不需要窗口函数,而只需要条件聚合:

sum(case when year(s.bus_dat) = year(getdate()) and month(s.bus_dat) = month(getdate())
         then qty_sold
    end) as mtd