Запрос SQL Select Sum

#sql #types #group-by #sum #case

#sql #типы #группировать по #сумма #случай

Вопрос:

Мне нужно выполнить следующее, но мне нужно СУММИРОВАТЬ в EntryValue, где EntryType= ‘C’ — EntryType = ‘D’, но я не уверен, куда это включить.

 SELECT SUM(EntryValue) AS EntryValue, Left(Warehouse,1) AS Branch 
FROM GenJournalDetail INNER JOIN InvJournalCtl ON (GenJournalDetail.GlPeriod = InvJournalCtl.LedgPeriod) AND (GenJournalDetail.GlYear = InvJournalCtl.YearPostLedg) AND (GenJournalDetail.Journal = InvJournalCtl.GlJournal)
WHERE GenJournalDetail.GlCode = 'Z5207550' AND GlYear = '2011' AND GlPeriod = '10' 
GROUP BY Left(InvJournalCtl.Warehouse,1) 
  

Ответ №1:

Выберите его, затем сгруппируйте;

 SELECT SUM(EntryValue) AS EntryValueTotal, EntryType, Left(Warehouse,1) AS Branch 
...
GROUP BY Left(InvJournalCtl.Warehouse,1), EntryType
  

Редактировать Я не понимал, что вы хотите вычесть;

 SELECT
    SUM(CASE EntryType
        WHEN 'C' THEN EntryValue
        ELSE 0 END
    )
    -
    SUM(CASE EntryType
        WHEN 'D' THEN EntryValue
        ELSE 0 END
    ) AS EntryValueTotal, 
    Left(Warehouse,1) AS Branch 
FROM GenJournalDetail 
  INNER JOIN InvJournalCtl ON (GenJournalDetail.GlPeriod = InvJournalCtl.LedgPeriod) AND (GenJournalDetail.GlYear = InvJournalCtl.YearPostLedg) AND (GenJournalDetail.Journal = InvJournalCtl.GlJournal)
WHERE 
  GenJournalDetail.GlCode = 'Z5207550' AND GlYear = '2011' AND GlPeriod = '10' 
GROUP BY Left(InvJournalCtl.Warehouse,1) 
  

Комментарии:

1. Извините, но этот ответ не имеет смысла.

2. Извините, у меня в мозгу значение EntryValue, поле, которое мне нужно уточнить, это if EntryType = ‘D’ не значение ввода

3. @t-clausen.dk да, вы правы, я не уделил достаточного внимания вопросу, SUM (EntryValue) где EntryValue может быть символом, не имеет смысла

4. Нужно ли группировать по типу записи? Мне нужно отнять одно от другого, чтобы получить общее количество.

5. Извините, не понял, что вы хотели вычесть

Ответ №2:

Если вам нужно суммировать столбец, добавьте его в поле выбрать и сгруппировать:

 SELECT SUM(EntryValue) AS TotEntry, ...
...
GROUP BY ...
  

вам не нужно группировать агрегированный столбец; вам также нужно фильтровать запрос?

Комментарии:

1. Нужно ли группировать по типу записи? Мне нужно отнять одно от другого, чтобы получить общее количество.

2. Извините, я не понимаю, что вам нужно. Что вы хотите получить с помощью запроса?

3. Вы правы! Я меняю код на старый, вы никогда не получите сумму, но повторите EntryValue… Но я по-прежнему не понимаю его потребностей.