2015-04-16 5 views
0
Select 
    AvHours.LineNumber, 
    (SProd.PoundsMade/(AvHours.AvailableHRS - SUM (ProdDtime.DownTimeHRS))) AS Throughput, 
    SUM (ProdDtime.DownTimeHRS) AS [Lost Time], 
    (SUM(cast(ProdDtime.DownTimeHRS AS decimal(10,1))) * 100)/(cast(AvHours.AvailableHRS AS decimal(10,1))) AS [%DownTime], 
    SUM(SProd.PoundsMade) AS [Pounds Made], 
    (SProd.PoundsMade/(AvHours.AvailableHRS - SUM (ProdDtime.DownTimeHRS))) * SUM (ProdDtime.DownTimeHRS) AS [Pounds Lost] 
FROM rpt_Line_Shift_AvailableHrs AvHours 
    inner join rpt_Line_Shift_Prod SProd on 
     AvHours.LineNumber=SProd.LineNumber AND AvHours.Shiftnumber=SProd.Shiftnumber 
    inner join rpt_Line_Shift_ProdDownTime ProdDtime on 
     (AvHours.LineNumber=ProdDtime.LineNumber AND AvHours.Shiftnumber=ProdDtime.Shiftnumber) 
GROUP BY AvHours.LineNumber,SProd.PoundsMade,AvHours.AvailableHRS 
ORDER BY AvHours.LineNumber 

Приведенный выше запрос дает следующий набор результатов:Как подвести итоги в 4 строки?

Line#,Throughput,Lost Time, %downtime,Pounds Made,Pounds Lost 

1 53 49 27.222222 97538 2597 
1 44 39 20.312500 116229 1716 
1 47 40 22.222222 92190 1880 
1 55 31 16.145833 133215 1705 
1 111 49 27.222222 204442 5439 
1 13 31 16.145833 33540 403 
1 86 49 27.222222 159432 4214 
1 81 31 16.145833 197145 2511 
1 74 40 22.222222 146202 2960 
1 63 49 27.222222 115920 3087 
1 76 39 20.312500 199172 2964 
2 64 40 22.222222 126028 2560 
2 149 49 27.222222 273966 7301 
2 35 39 20.312500 92616 1365 
3 49 39 20.312500 129591 1911 
3 65 40 22.222222 129248 2600 
3 84 39 20.312500 219997 3276 
4 95 31 16.145833 229485 2945 
4 76 40 22.222222 149996 3040 
4 94 31 16.145833 228375 2914 
4 99 39 20.312500 259794 3861 

То, что я на самом деле хочу это всего 4 линии (Line# = 1,2,3 или 4), а все остальные поля суммируются.

Я не уверен, как это сделать. Может ли кто-нибудь помочь?

+0

Структура предложения изменена, чтобы уточнить вопрос – Tony

ответ

0

Избавьтесь от PoundsMade и AvailableHrs в своей группе. Похоже, вы только хотите сгруппировать по Линейному номеру.

+0

Я попробовал, чтобы это дало мне ошибку. «Msg 8120, уровень 16, состояние 1, строка 2 Столбец« rpt_Line_Shift_Prod.PoundsMade »недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. Msg 8120, уровень 16, состояние 1 , Строка 2 Столбец «rpt_Line_Shift_AvailableHrs.AvailableHRS» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY ». –

+0

Это правда. Каждое поле, которое не находится в 'GROUP BY', должно быть обернуто внутри агрегата. Например: 'SProd.PoundsMade/(AvHours.AvailableHRS - SUM (ProdDtime.DownTimeHRS)))' возможно, может быть 'SUM (SProd.PoundsMade)/(SUM (AvHours.AvailableHRS) - SUM (ProdDtime.DownTimeHRS)))' , Возможно, вам придется обновить другие столбцы. Проверьте, работает ли эта формула для ваших данных. – NYCdotNet

+0

Я тоже пробовал это, но снова его дал мне ошибку .... :(Msg 130, Level 15, State 1, Line 3 Невозможно выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос. –

0

Вы можете использовать свой sql как вложенную таблицу, а затем группировать по номеру строки , как указано ниже.

Select LineNumber, Sum(Throughput), Sum([Lost Time]), Sum([%DownTime]), Sum([Pounds Made]), Sum([Pounds Lost]) From (Select AvHours.LineNumber, (SProd.PoundsMade/(AvHours.AvailableHRS - SUM (ProdDtime.DownTimeHRS))) AS Throughput, SUM (ProdDtime.DownTimeHRS) AS [Lost Time], (SUM(cast(ProdDtime.DownTimeHRS AS decimal(10,1))) * 100)/(cast(AvHours.AvailableHRS AS decimal(10,1))) AS [%DownTime], SUM(SProd.PoundsMade) AS [Pounds Made], (SProd.PoundsMade/(AvHours.AvailableHRS - SUM (ProdDtime.DownTimeHRS))) * SUM (ProdDtime.DownTimeHRS) AS [Pounds Lost] FROM rpt_Line_Shift_AvailableHrs AvHours inner join rpt_Line_Shift_Prod SProd on AvHours.LineNumber=SProd.LineNumber AND AvHours.Shiftnumber=SProd.Shiftnumber inner join rpt_Line_Shift_ProdDownTime ProdDtime on (AvHours.LineNumber=ProdDtime.LineNumber AND AvHours.Shiftnumber=ProdDtime.Shiftnumber) GROUP BY AvHours.LineNumber,SProd.PoundsMade,AvHours.AvailableHRS ) A Group BY LineNumber ORDER BY LineNumber

Я не имею сервера SQL прямо сейчас, чтобы проверить это, но дайте мне знать, если вы столкнулись с какой-либо вопрос

Пожалуйста, отметьте это как ответ, если это помогло решить вашу проблему

Смежные вопросы