Группировка по подзапросу в SQL по уникальному идентификатору - PullRequest
0 голосов
/ 13 июня 2019

У меня есть запрос, который получает результаты из временной таблицы. Он имеет совокупные столбцы, которые получены из временной таблицы:

SELECT
 DISTINCT
 SUM(a),
 SUM(b),
 c,
 d,
 id1
FROM
 #tmpTable
 .
 .
 .
 join with many other tables

Теперь я хочу получить СУММУ столбцов c & d, возвращаемых из запроса вместе со всеми другими столбцами. Это будет группа по id1. Это должно выглядеть примерно так:

+--------------------------------------------
||Sum(A)  |Sum(B)|C     |D        |id1      |
|-------------------------------------------+
|  12     |34    |1     | 3       | 1       |
|-------------------------------------------+
|  22     |37    | 2    | 4       | 2       |
|-------------------------------------------+
|  33     | 55   | 3    | 5       | 1       |
|-------------------------------------------+
| 44      | 25   | 5    | 6       | 2       |
+---------+------+------+---------+---------+

Окончательный результат должен быть таким:

+--------------------------------------------
||Sum(A)  |Sum(B)|Sum(C)|Sum(d)   |id1      |
|-------------------------------------------+
|  12     |34    |4     | 8       | 1       |
|-------------------------------------------+
|  22     |37    | 7    | 10      | 2       |
|-------------------------------------------+
|  33     | 55   | 4    | 8       | 1       |
|-------------------------------------------+
|  44     | 25   | 7    | 10      | 2       |
+---------+------+------+---------+---------+

Ответы [ 3 ]

1 голос
/ 13 июня 2019
select
    x.sum_a,
    x.sum_b,
    x.sum_c,
    x.sum_d,
    t.id1
from
    tmpTable t
join
(
select
    id1,
    sum(A) as sum_a,
    sum(B) as sum_b,
    sum(C) as sum_c,
    sum(D) as sum_d
from
    tmpTable
group by
    id1
) x on t.id1 = x.id1
1 голос
/ 13 июня 2019

Поскольку у вас есть разные критерии группировки для A и B, вы можете сгруппировать их по отдельности в C и D. Приведенное ниже (с использованием общего табличного выражения) может привести вас к правильному пути:

    ; with SummaryValues AS
    (
        select id1, sum(C) as SumC, SUM(D) as SumD
        from #SourceTable
        group by id1
    )
    select SUM(st.A), SUM(st.b), sv.SumC, sv.SumD, st.id1
    from #SourceTable st
    inner join SummaryValues sv
        on st.id1 = sv.id1
    group by <whatever grouping you are using>
0 голосов
/ 13 июня 2019

Если ваш текущий реальный запрос суммирует a и b так, как вы хотите, и генерирует этот первый пример вывода, возможно, что-то вроде:

SELECT DISTINCT
 SUM(a),
 SUM(b),
 SUM(c) OVER (PARTITION BY id1),
 SUM(d) OVER (PARTITION BY id1),
 id1
FROM
 #tmpTable
 .
 .
 .
 join with many other tables

чтобы получить второе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...