Mahfoud Bouabdallah Ответов: 2

Неверные значения суммы количество умножается на количество строк


У меня есть этот запрос select
SELECT 
      info.[OFNumber] 
      --Get sum of item quantity from the same category (all quantity before production) PS_ProjectInfo table
      ,SUM(Case WHEN info.[FK_PSCategory]=2 then ((info.Length * info.[Quantity] )/1000)Else 0 end ) as 'm'
      
     -- Get sum of item quantity from the same category (Only quantity produced) PS_DailyProduction table
     ,SUM(Case WHEN info.[FK_PSCategory]=2 then PS_DailyProduction.Quantity ELSE 0 END) as 'qty'

    FROM [dbo].[PS_DailyProduction] 
    Left JOIN PS_ProjectInfo info on info.id=PS_DailyProduction.[FK_OF]
  
    GROUP BY info.[OFNumber]

Теперь ,если каждый товар был произведен сразу, у меня есть одна строка в моей таблице PS_DailyProduction, нет никакой проблемы, но когда какой-либо товар был произведен в два или более раз (например, половина количества в один день, а остальное в другой день), ее проблема показывает, что в моей таблице PS_DailyProduction у меня есть более одной строки, и я получаю неправильный результат в другой день.
--Get sum of item quantity from the same category (all quantity before production) PS_ProjectInfo table
      SUM(Case WHEN info.[FK_PSCategory]=2 then ((info.Length * info.[Quantity] )/1000)Else 0 end ) as 'm'

Это количество умножается на количество строк из PS_DailyProduction

Цитата:
Я использую LEFT JOIN, чтобы получить все строки из таблицы PS_ProjectInfo, даже если они еще не созданы


Что я уже пробовал:

Я попробовал это сделать, но ничего не вышло (деление на количество строк)
--Count(PS_DailyProduction.FK_OF)
    SUM(Case WHEN [FK_PSCategory]=2 then ((info.Length * info.[Quantity] )/1000)Else 0 end ) /Count(PS_DailyProduction.FK_OF)as 'm'

Maciej Los

Не могли бы Вы уточнить эту часть: "половина количества в один день а остальное в другой деньВам нужна его сумма или среднее значение (или еще что-то)?

2 Ответов

Рейтинг:
12

Mahfoud Bouabdallah

С помощью Akina - Администраторы Баз Данных Stack Exchange[^]
Вот как я это сделал

   SELECT 
  info.[OFNumber] 
  --Get sum of item quantity from the same category (all quantity before production) PS_ProjectInfo table
  ,(SELECT SUM(CASE WHEN (PS_ProjectInfo.[FK_PSCategory]=2 )THEN CAST(((CAST(PS_ProjectInfo.Length AS float) * PS_ProjectInfo.[Quantity])/1000)AS decimal(18,2)) ELSE 0 END) 
      FROM PS_ProjectInfo WHERE PS_ProjectInfo.OFNumber=info.[OFNumber] GROUP BY PS_ProjectInfo.OFNumber) as 'm'
  
 -- Get sum of item quantity from the same category (Only quantity produced) PS_DailyProduction table
 ,SUM(Case WHEN info.[FK_PSCategory]=2 then PS_DailyProduction.Quantity ELSE 0 END) as 'qty'

FROM [dbo].[PS_DailyProduction] 
Left JOIN PS_ProjectInfo info on info.id=PS_DailyProduction.[FK_OF]

GROUP BY info.[OFNumber]


Рейтинг:
1

OriginalGriff

Попробуйте использовать GROUP BY: SQL GROUP BY Statement - w3Schools[^]


Mahfoud Bouabdallah

@OriginalGriff я стараюсь, чтобы это не сработало

OriginalGriff

"Это не работает", вероятно, самый бесполезный отчет о проблеме, который мы получаем - и мы получаем его много. Она ничего не говорит нам о том, что происходит или когда это происходит.
Итак, расскажите нам, что он делает, чего вы не ожидали, или не делает, что вы сделали.
Расскажите нам, что вы сделали, чтобы это произошло.
Сообщайте нам о любых сообщениях об ошибках.

Покажи нам, что ты пробовал.