Разложение оператора GROUP BY - PullRequest
0 голосов
/ 03 августа 2011

Если у меня есть таблица SomeTable со следующими данными:

Primary Key    Column1    Column2    Column3    Column4    Column5    Num
    1           dat1       abc1       dat3       dat4       por7       1
    2           dat1       gcd4       dat3       dat4       yrt8       6
    3           dat1       iut7       dat3       dat4       asd6       2  
    4          other1     other2     other3     other4     other5      4 

Другая таблица SomeTableGrouped с версией «Group Byed», созданной с помощью запроса, подобного этому:

INSERT INTO SomeTableGrouped
SELECT Column1, Column3, Column4, SUM(Num)
FROM SomeTable
GROUP BY Column1, Column3, Column4

Primary Key    Column1    Column3    Column4    Num
    100         dat1       dat3       dat4       9
    200        other1     other3     other4      4 

Что я хотел бы сделать, так это то, что если у меня есть первичный ключ SomeTableGrouped, я должен иметь возможность определить, из каких именно строк из SomeTable он получен.

Пример:

В отдельной таблице RandomTable у меня есть такие данные:

Primary Key    Column1    SomeTableGroupedId
    1           dat1             100
    2           dat2             100

Если я посмотрю на первый ряд, мне нужно будет перечислить строки 1 - 3 из SomeTable

Как я могу это сделать? Я не могу сильно изменить схему (т. Е. Я могу только добавить новые столбцы, удалить столбцы, добавить новую таблицу), поэтому грязное решение меня вполне устраивает.

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Я думаю, это то, что вы хотите.

SELECT id
FROM SomeTable
INNER JOIN SomeTableGrouped ON
    (SomeTable.Column1 = SomeTableGrouped.Column1) AND
    (SomeTable.Column2 = SomeTableGrouped.Column2) AND
    (SomeTable.Column3 = SomeTableGrouped.Column3) 
WHERE SomeTableGrouped.id = ...
0 голосов
/ 03 августа 2011

Вам даже не нужно создавать все эти таблицы, вам нужно только SomeTable.Но здесь мы идем ...

Если вы хотите найти идентификаторы суммированных записей, просто свяжите их, как они были созданы:

select st.PrimaryKey as STPK,  stg.PrimaryKey as STGPK
from SomeTable st 
inner join SomeTableGrouped stg
on (st.Column1 = stg.Column1 and 
    st.Column3 = stg.Column3 and 
    st.Column5 = stg.Column5)

Однако вы не должны дажесоздали SomeTableGrouped в виде таблицы.Это может быть представление (смотрите здесь, чтобы узнать, как создавать представления в DB2 ).

Таким образом, вы убедитесь, что данные всегда обновлены, и вам не нужно беспокоиться о обратном отслеживании («что если Num будет обновлено?»).

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