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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top