Сумма в подзапросе для группы чисел - PullRequest
0 голосов
/ 01 ноября 2018

Мы пытаемся получить комбинированную таблицу, в которой мы также пытаемся суммировать объем.

Дата установлена ​​прямо сейчас:

+-------------+-----+------------+------------+--------+---------+
| Voorziening | BSN | Begindatum | Einddatum  | Volume | Product |
+-------------+-----+------------+------------+--------+---------+
| 1000        |  1  |  1-1-2017  | 31-1-2017  |   50   |   AAAA  |
+-------------+-----+------------+------------+--------+---------+
| 1200        |  1  |  1-2-2017  | 31-3-2017  |   200  |   AAAA  |
+-------------+-----+------------+------------+--------+---------+
| 1250        |  1  |  1-4-2017  | 10-4-2017  |   90   |   AAAA  |
+-------------+-----+------------+------------+--------+---------+
| 1111        |  2  |  4-1-2017  | 10-1-2017  |   4    |   AABB  |
+-------------+-----+------------+------------+--------+---------+
| 1345        |  2  |  11-1-2017 | 29-1-2017  |   80   |   AABB  |
+-------------+-----+------------+------------+--------+---------+
| 2000        |  1  |  10-1-2017 | 31-1-2017  |   90   |   CCCC  |
+-------------+-----+------------+------------+--------+---------+
| 2190        |  1  |  1-2-2017  | 31-12-2017 |   100  |   CCCC  |
+-------------+-----+------------+------------+--------+---------+

Чего я хочу достичь

+-------------+-----+------------+------------+--------+---------+
| Voorziening | BSN | Begindatum | Einddatum  | Volume | Product |
+-------------+-----+------------+------------+--------+---------+
| 1000        |  1  |  1-1-2017  | 10-4-2017  |   340  |  AAAA   |
+-------------+-----+------------+------------+--------+---------+
| 2000        |  1  |  10-1-2017 | 31-12-2017 |   190  |  CCCC   |
+-------------+-----+------------+------------+--------+---------+
| 1111        |  2  |  4-1-2017  | 29-1-2017  |   84   |  AABB   |
+-------------+-----+------------+------------+--------+---------+

То, что я получил, это следующий запрос:

SELECT  min(b.Voorziening) as voorzieningsnummer
,a.BSN
,min(b.Begindatum) as mindatum
,MAX(b.Einddatum) AS maxdatum
,a.Productcode
,
(SELECT sum(Volume)
FROM Voorziening
)as totaal
FROM Voorziening a
INNER JOIN Voorziening b
ON a.BSN = b.BSN
AND a.Productcode = b.Productcode
GROUP BY a.BSN, a.Productcode

Результат дает мне это:

+-------------+-----+------------+------------+--------+
| Voorziening | BSN | Begindatum | Einddatum  | Volume |
+-------------+-----+------------+------------+--------+
| 1000        |  1  |  1-1-2017  | 10-4-2017  |   424  |
+-------------+-----+------------+------------+--------+
| 1111        |  2  |  4-1-2017  | 29-1-2017  |   424  |
+-------------+-----+------------+------------+--------+

Вы, ребята, можете помочь мне правильно определить сумму?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

если вы используете SQL Server 2008 или более поздней версии, просто наберите PARTITION BY

SUM(Volume)over(Partition by Product order by Voorziening,another,another)
0 голосов
/ 01 ноября 2018

Нет причин использовать JOIN. Вы можете использовать агрегатную функцию напрямую.

Вы можете попробовать это.

SELECT  min(a.Voorziening) as voorzieningsnummer
        ,a.BSN
        ,min(a.Begindatum) as mindatum
        ,MAX(a.Einddatum) AS maxdatum
        ,a.Productcode
        ,SUM(a.Volume) Volume 
FROM Voorziening a
GROUP BY a.BSN, a.Productcode
...