Vraag : Hoe kan ik een gefingeerde rij in een resultaatreeks terugkeren?

De volgende die vraag doet een telling van rijen door Datum en de persoon van de Verkoop worden gegroepeerd.  Ik moet al persoon van de dataverkoop zonder rijen een telling van nul geven. Is er een manier om dit in de vraag zelf te doen?


1:
2:
3:
4:
5:
SELECT s.eventStartDate, s.salesPersonID, Telling (s.salesEventID) ALS CountEvent
VAN smd_salesEvent s
WAAR (((s.saleTypeID) =1) EN ((s.storeID) <>0) EN ((s.saleEventStatus) <> " beëindigt "))
GROEP DOOR s.eventStartDate, s.salesPersonID
HEBBEND (((s.eventStartDate) tussen #7/4/2010# en #7/10/2010#));

Antwoord : Hoe kan ik een gefingeerde rij in een resultaatreeks terugkeren?

Om cyberkiwi te nemen kon één verdere stap u het volgende proberen.  WAAR Richard verkoos om VERSCHILLENDE Datum te selecteren, zullen de mensencombinaties, het volgende Cartesiaans toetreden van datum/mensen terugkeren (subtiel verschil).

SELECTEER eDatePeople.eventStartDate, eDatePeople.SalesPersonID, Telling (S3.SalesEventID) als CountEvent
VAN (
SELECTEER eDates.EventStartDate, ePeople.SalesPersonID
VAN
(UITGEZOCHTE VERSCHILLENDE S1.eventStartDate VAN smd_salesEvent S1
WAAR S1.EventStartDate TUSSEN #7/4/2010# en #7/10/2010#
EN S1.SaleTypeID = „beëindigen“ <> 1 EN S1.StoreID <> 0 EN S1.SaleEventStatus) als eDates,
(UITGEZOCHTE VERSCHILLENDE S2.salesPersonID VAN smd_salesEvent S2
WAAR S2.EventStartDate TUSSEN #7/4/2010# en #7/10/2010#
EN S2.SaleTypeID = „beëindigen“ <> 1 EN S2.StoreID <> 0 EN S2.SaleEventStatus) als ePeople
) als eDatePeople
De LINKERZIJDE SLUIT zich aan bij smd_salesEvent S3
OP eDatePeople.eventStartDate = S3.eventStartDate
EN eDatePeople.SalesPersonID = S3.SalesPersonID
GROEP DOOR eDatePeople.eventStartDate, eDatePeople.SalesPersonID

Dit heeft twee subqueries die de verschillende data (eDates) en de verschillende mensen selecteren (ePeople) die aan de criteria beantwoorden u hebt geselecteerd.  Het voegt hen dan in Cartesiaans samen toetreedt (eDatePeople) die u elke combinatie van elke datum/persoon voor die criteria geeft.  Tot slot treedt het eDatePeople terug naar smd_SalesEvent toe om de telling van SalesEventID voor elke datum/persoonscombinatie te krijgen.

Wat niet het doet is waarborg dat u alle data zult hebben die tussen uw begin en einddatum voorkomen, aangezien de andere criteria nul verslagen, of één of andere ondergroep van waarden konden terugkeren.  Het keert ook slechts verslagen voor die verkoopmensen die terug minstens één verslag hebben dat aan uw criteria voldoet.  Als een persoon op vakantie is of niet aan enige verkoopgebeurtenis tijdens de gespecificeerde periode deelnam, zal hun naam helemaal niet verschijnen.

Als u zou willen ervoor zorgen dat alle data tijdens een periode zijn teruggekeerd, kon u een lijst van data gebruiken om met het eDatesgedeelte van de vraag in plaats van subquery op de proppen te komen die ik heb gebruikt.
Andere oplossingen  
 
programming4us programming4us