Temat: Grupowanie i dla jednej z wartości suma całkowita

Hej,

Mam 2 tabele.

1 Regiony(ID, Name)
Wartości
1 - All
2 - North
3 - South
4 - BlaBla

2 Wartosci(RegionID, Wartosc)

I tu mam rożne wariacje dla regionów, ale innych niż region ALL,

Chciałbym zwrócić sumę wartości dla poszczególnych regionów, co jest proste, ale ponieważ region ALL nie jest przypisany nigdzie, to chciałbym dla tej wartości zwrócić sumę całkowitą z tabeli drugiej.

Jest możliwe coś takiego?

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

Temat: Grupowanie i dla jednej z wartości suma całkowita

select r.ID,r.Name,sum(w.Wartosc) from Regiony r
inner join Wartosci w on r.ID = case when r.ID = 1 then r.ID else w.RegionID end
group by r.ID,r.Name

select r.ID,r.Name,x.Wartosc from Regiony r inner join
(select RegionID,sum(Wartosc) Wartosc from Wartosci group by cube (RegionID)) x
on r.ID = isnull(x.RegionID,1)Ten post został edytowany przez Autora dnia 01.10.14 o godzinie 10:25

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

Temat: Grupowanie i dla jednej z wartości suma całkowita

Dzięki, Union się przyda.

Znajomy też mi podpowiedział z użyciem funkcji UNION, ale nie UNION ALL. Oba są poprawne?

Baza jest w MS SQL.Ten post został edytowany przez Autora dnia 01.10.14 o godzinie 11:16
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Grupowanie i dla jednej z wartości suma całkowita

Maciej P.:
Dzięki, Union się przyda.

Znajomy też mi podpowiedział z użyciem funkcji UNION, ale nie
Złączenie 2 tabel
UNION ALL. Oba są poprawne?
Złączenie 2 tabel, ale zostają same unikaty.

Baza jest w MS SQL.

konto usunięte

Temat: Grupowanie i dla jednej z wartości suma całkowita

Możesz też spróbować czegoś takiego:

select isnull(r.Name,'All') as Name,sum(w.Wartosc) from Regiony r
inner join Wartosci w on r.ID = w.RegionID
group by grouping sets (r.Name,())

Powinno być szybsze niż w rozbiciu na dwa zapytania.

Temat: Grupowanie i dla jednej z wartości suma całkowita

Hmm, ciekawe.

A co powoduje takie grupowanie?
group by grouping sets

konto usunięte

Temat: Grupowanie i dla jednej z wartości suma całkowita

Powoduje to samo, co zapytanie, które podał wyżej kolega. W nawiasie wypisujesz rodzaje grupowań, jakie Cię interesują. W tym przypadku są tylko dwie możliwości - po nazwie regionu i po całości (gdybyś miał więcej kolumn, to można by podać więcej wariantów). Pusty nawias to rekord podsumowujący cały zbiór czyli Twoje All.
Najlepiej po prostu puścić i sprawdzić, jak to działa.
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Grupowanie i dla jednej z wartości suma całkowita

W twoim przypadku najlepiej zastosować jedną z funkcji z rodziny GROUPING SETS, które pojawiły się od SQL Server 2008 jako rozszerzenie klauzuli GROUP BY.

W przypadku funkcji GROUPING SETS w nawiasach możesz dokładnie określić jakie kombinacje podsumowań ciebie interesują. To dużo prostsze rozwiązanie niż tworzenie osobnych zapytań i łączenie ich za pomocą UNION, choć daje ten sam efekt.

Masz jeszcze do dyspozycji funkcje ROLLUP oraz CUBE, które działają tak samo jak GROUPING SETS, ale mają z góry narzuconą strategię: ROLLUP tworzy podsumowania w sposób hierarchiczny, natomiast CUBE tworzy wszystkie kombinacje podsumowań.

Więcej na temat znajdziesz na blogu:
http://mndevnotes.wordpress.com/2012/10/03/grupowanie-...

Oczywiście, wartość NULL możesz zamienić na wartość ALL w ten sposób: isnull(regionId, 'All')

Następna dyskusja:

ssrs, suma dla wartosci




Wyślij zaproszenie do