Как суммировать поля в разных группах в T-SQL

#sql #tsql #sum

#sql #tsql #сумма

Вопрос:

У меня есть куча таблиц, которые я left join и Group By предложение, которое группирует кучу столбцов.

Однако есть один столбец, который group-by включен, но остается отдельным (productNumber).

Мне нужно суммировать столбец количества ниже:

 salesID  historyID  productID  name  productNumber  quantity
      1        123          1     A         234554        10
      1        123          1     A         666666        10
 

Мне нужна только первая запись, но с количеством 10 10 = 20.

Первая запись будет иметь флаг mainNumber = 1, а вторая запись будет иметь mainNumber = 0, однако этот столбец не отображается в SELECT .

Другими словами, я хотел бы суммировать количества, но отображать только productNumber, где mainNumber = 1.

Как мне это сделать?

Спасибо!

Ответ №1:

Если я правильно понял вопрос, это может вам помочь:

 SELECT salesID, historyID, productID, name, productNumber, total.quantity
FROM table1
JOIN (
     SELECT salesID, SUM(quantity) AS quantity FROM table1 GROUP BY salesID
     ) AS total
ON table1.salesID = total.salesID
WHERE mainNumber=1
 

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

1. По сути, это то, что мне было нужно, по крайней мере, я двигаюсь в правильном направлении. Большое спасибо.

Ответ №2:

Не совсем уверен, что я понял… В результирующем наборе вам нужна только первая строка, но какое значение должно быть в столбце productNumber?

Если подойдет практически любое значение, вы не должны ГРУППИРОВАТЬ ПО productNumber (что позволяет различать строки), а агрегировать его, например, с помощью MIN или MAX .