2017-01-23 7 views
1

Я использую следующий запросSUM строк по неделям синтаксисом

SELECT CONVERT(date,lot.Killdate) as KillDate 
    ,lot.[LotNo] 
    ,lot.[HotWeight] 
    ,lot.[AverageYieldGrade] 
    ,(lot.HeadShorn + lot.HeadUnshorn) as 'Total' 
    ,(lot.HotWeight)/(lot.HeadShorn + lot.HeadUnshorn) as 'AvgWeight' 
    ,date.Date 
    ,date.WeekOfYear 
FROM [LambLot].[dbo].[LotHeader] lot, Master_Dim.dbo.DateDim date 
WHERE CONVERT(date,lot.KillDate) = date.Date 
and lot.KillLocation = 1 
AND lot.HeadShorn > 0 
AND lot.HeadUnshorn > 0 
AND date.Year = 2016 
group by lot.LotNo, lot.HeadShorn, lot.HeadUnshorn, lot.HotWeight lot.AverageYieldGrade, lot.KillDate, date.Date, date.WeekOfYear 
order by date.WeekOfYear asc 

Вот копия выхода

KillDate LotNo HotWeight AverageYieldGrade Total AvgWeight   Date  WeekOfYear 
1 2016-01-04 102  21603.5  2.28    348  62.0790229885057 2016-01-04 2 
2 2016-01-04 103  2305.3  1.42    53  43.4962264150943 2016-01-04 2 
3 2016-01-04 105  1159  0     17  68.1764705882353 2016-01-04 2 
4 2016-01-04 108  1493.6  0     39  38.2974358974359 2016-01-04 2 
5 2016-01-04 109  2982.8  0     80  37.285    2016-01-04 2 

Что я хотел бы сделать, это сумма каждой строки в weekofyear. По существу давая мне 52 строки вывода, с суммами каждого значения в каждом показанном столбце. Есть ли способ сделать это?

+0

Что-то вроде ... 'select datepart (yy, datecolumn) как YearNum, datepart (wk, datecolumn) как WeekNum, sum (someColumn) from someTable group by datepart (yy, datecolumn), datepart (wk, datecolumn)' – scsimon

ответ

0

Если вам нужно SUM всего WeekOfYear, вам нужно GROUP BY только неделю года. Вы должны решить, как вы справляетесь другие значения, вот один из способов, который может иметь смысл (с некоторым ожидаемым выходом было бы легче понять, что вы действительно ищете):

SELECT CONVERT(date, MAX(lot.Killdate)) as KillDate 
    ,MAX(lot.[LotNo]) -- ?? Does this really belong in this query? 
    ,SUM(lot.[HotWeight]) 
    ,AVG(lot.[AverageYieldGrade]) 
    ,(SUM(lot.HeadShorn) + SUM(lot.HeadUnshorn)) as 'Total' 
    ,SUM(lot.HotWeight)/(SUM(lot.HeadShorn) + SUM(lot.HeadUnshorn)) as 'AvgWeight' 
    ,MAX(date.Date) 
    ,date.WeekOfYear 
FROM [LambLot].[dbo].[LotHeader] lot, Master_Dim.dbo.DateDim date 
WHERE CONVERT(date,lot.KillDate) = date.Date 
and lot.KillLocation = 1 
AND lot.HeadShorn > 0 
AND lot.HeadUnshorn > 0 
AND date.Year = 2016 
group by date.WeekOfYear 
order by date.WeekOfYear asc 

Только помните: любые столбцы, которые вы GROUP BY, будут учтены в том, как определяется отдельная группа. Все, чего у вас нет в вашем GROUP BY, но в вашем выходе требуется только какая-то совокупная функция (например, MIN, MAX, AVG, SUM, COUNT и т. Д.).

+0

Отличный комментарий @Dan поле. Я не понимал, что для того, чтобы удалить столбцы из группы с помощью оператора, я должен был добавить агрегированную функцию. Отлично. Спасибо!! –