Unterabfrage group by Problem


julia23

Mitglied
Tabelle Produkt:

ProduktId Produkt IsActive DeleteDate

1 Hammer 1 250115

2 Meisel 1 250115

3 Nagel 1 250115

4 Schraube 0 250115

5 Laim 0 240115



Verkauf

VerkaufId Kunde ProduktId NichtRückläufig GrundRückläufig

10 Siggi 1 1 1 null

12 Franz 2 2 1 null

13 Bernd 3 3 null 5

10 Bea 1 4 null 5

12 Sabine 2 1 1 null

12 Sabine 2 1 null 5
13 Tanja 3 2 null 8



Ausgabe:

Verkaufstatistik

ProduktId NichtRückläufig Rückläufig5 Rückläufig8

1 2 1 0

2 1 0 1

Etc…

Jetzt will ich eine neue Tabelle machen.

Die nenne ich mal Verkaufsstatistik.

Da möchte ich nun:

1. Erstmal alle rausfiltern die nicht mehr aktiv sind (IsActive =1)

2. Aus diesen dann nur die in einem bestimmten Zeitintervall

3. Und dann nach den Gründen sotiert zählen, dass ganze aber gruppiert bei den ProduktIds


Normalerweise würde ich so anfangen:

var validSales = from sale in sales

join product in products on sale.ProductId equals product.Id

where sale.IsValid && product.IsActive

select sale;


foreach (var sale in validSales)

Console.WriteLine(sale.Id + " " + sale.Name + " " + sale.ProductId + " " + sale.IsValid);



Aber ich weiß nicht wie es weitergehen soll…
Was mich grundsätzlich irritiert, dass ich diese Unterabfrage nicht für jedes Count machen kann, da es
ja nach ProductId gruppiert ist...
Ich hoffe ich konnte mein Problem verständlich schildern
 

julia23

Mitglied
Ich habe das Problem wie folgt gelöst:

var validSales = (from sale in sales
join product in products on sale.ProductId equals product.Id
where sale.IsValid && product.IsActive)
GroupBy(sale => sale.ProduktID)
.Select(group => new {
ID= group.Key,
Name = group.FirstOrDefoult().Produkt,
CountNichtRückläufig = group.Count(c => c.NichtRückläufig )
})

select sale;

Nur mit der Zeit habe ich noch Probleme.