2016-05-03 5 views
1

Я пытаюсь использовать самостоятельное соединение, чтобы получить кумулятивную сумму. Проблема заключается в том, что запрос выполняется более 2 часов без какого-либо результата. Как я могу это исправить.Self join, вызывающий запрос для запуска навсегда

Select SUM(A.[GrossWeightKg] - A.[QtyLeftKg])/ 1000 AS DailyUsage 
    , SUM(a.[GrossWeightKg] - a.[QtyLeftKg])/ 1000 AS Cumulative 
FROM [PMECentral].[dbo].[FactActualItemUsage] A 
    LEFT OUTER JOIN [PMECentral].[dbo].[FactActualItemUsage] ff 
     ON a.ActualItemUsageSourceId >= ff.ActualItemUsageSourceId 
+0

В SQL-сервер 2012 вы можете использовать что-то вроде 'SUM (а [GrossWeightKg] -.. А [QtyLeftKg]) OVER (ORDER BY ActualItemUsageSourceId РЯДОВ МЕЖДУ неограниченном ПРЕДЫДУЩИЙ И ТОКА ROW)' без автообъединение –

+0

Выражения для DailyUsage и Cumulative точно такие же. - Это ошибка, не так ли? – PhilS

+0

Вам не хватает дополнительного условия JOIN на ItemId или что-то в этом духе? Запрос, поскольку он будет производить огромный объем вывода и, в зависимости от объема данных в таблицах, будет работать некоторое время. – PhilS

ответ

1

В SQL-сервер 2012 вы можете использовать

.... 
SUM(a.[GrossWeightKg] - a.[QtyLeftKg]) OVER(ORDER BY ActualItemUsageSourceId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
.... 

без автообъединение. Посмотрите на OVER-clause, особенно часть с Rows -clause.