Wie Werte aller ersten Reihen von Untergruppen in einer Gruppe zusammenfassen, während MS SSRS verwenden?
-
26-09-2019 - |
Frage
In unserer DB haben wir: (x Mittel do not care)
GID UID COST
================================
A 1 100
A 1 x
A 2 200
A 2 x
B 3 330
B 3 x
Und der Kunde Bericht zu sehen erforderlich wie:
UID COST
================================
[Group - A]
1 100
1
2 200
2
---Subtotal: 300
[Group - B]
3 330
3 x
---Subtotal: 330
======Total: 630
Ich habe 2 Gruppen in der SSRS-Bericht ist eine Gruppe auf GID, und man ist Gruppe UID, und ich habe viele Wege versucht, alle ersten COST einer UID in einer Gruppe von GID zusammenzufassen. Aber kein Erfolg.
Wenn dieser Bericht in Crystal tun, können wir „auf Gruppenwechsel Formel“ verwenden, es zu erreichen. Aber in SSRS, fand ich keine Möglichkeit, es richtig zu machen.
Bitte kindly Hilfe!
Lösung
Sie müssen vielleicht auf die SQL zurück und erstellen Sie die Spalte, die Sie zusammenfassen möchten.
Mit Ihrem Beispiel:
select
GID,
UID,
Cost,
case when row_number() over(partition by GID,UID ORDER BY GID,UID,Cost) = 1 then Cost else 0 end as firstCostGroup
from
(
select 'a' as GID, 1 as UID, 100 as Cost
union
select 'a', 1, 101
union
select 'a', 2, 200
union
select 'a', 2, 201
union
select 'b', 3, 300
union
select 'b', 3, 301
) as rawdata
Die row_number Funktion erfordert SQL 2005 oder höher.
Eine Abhilfe für SQL 2000 würde wie etwas sein
drop table #RawData
go
drop table #RawDataFirstRows
GO
create table #RawData
(
id int identity(1,1),
GID varchar(10),
UID int,
Cost int
)
insert into #RawData
select 'a' as GID, 1 as UID, 100 as Cost
union
select 'a', 1, 101
union
select 'a', 2, 200
union
select 'a', 2, 201
union
select 'b', 3, 300
union
select 'b', 3, 301
create table #RawDataFirstRows
(
id int
)
insert into #RawDataFirstRows
select
rd.id
from #RawData rd
where
rd.id = (select top 1 id from #RawData rw where rd.uid = rw.uid and rd.gid = rw.gid order by rw.gid,rw.uid)
select
rd.GID, rd.UID, rd.Cost, case when rw.id is null then 0 else 1 end as firstCostGroup
from
#RawData rd
left join
#RawDataFirstRows rw on rd.id = rw.id
Beachten Sie, dass die verschachtelte Abfrage in der where-Klausel unglaublich inffecient ist, wie es die Abfrage für jede Zeile in der Tabelle #Rawdata zu nennen hat. Ruft der Job zu erledigen, aber zu welchem ??Preis?
Wenn es nicht Ursache von Leistungsproblemen bei Produktionsmengen von Daten der Fall ist, können Sie in Ordnung sein.