Fråga : Hur kan jag gå ett fiktivt tillbaka ror in i en resultatuppsättning?

Queryen gör efter en räkning av ror grupperat by daterar och Salepersonen.  Jag behöver att ge alla daterar reor som personen med inget ror en räkning av nolla. Finns det a långt som gör detta i queryen sig själv? för class=" codeSnippet " för


1 för >SELECT s.eventStartDate, s.salesPersonID, räkning (s.salesEventID) " för prettyprint " för class= för id= " codeSnippet804994 " för >
0) OCH (<> (s.saleEventStatus) " avbryter ")),
GRUPP VID s.eventStartDate, s.salesPersonID
HA (((s.eventStartDate) mellan #7/4/2010# och #7/10/2010#));
<-/pre>
" klar "

Svar : Hur kan jag gå ett fiktivt tillbaka ror in i en resultatuppsättning?

Att ta cyberkiwi en kliva vidare dig kunde det försök efter.  Datera, folk kombinationer, den efter ska returen som VAR Richard valde att välja DISTINKT, ett cartesian sammanfogar av daterar/folk (subtil skillnad).

VÄLJ eDatePeople.eventStartDate, eDatePeople.SalesPersonID, räkningen (S3.SalesEventID) som CountEvent
FRÅN (
VÄLJ eDates.EventStartDate, ePeople.SalesPersonID
FRÅN
(VALD DISTINKT S1.eventStartDate FRÅN smd_salesEvent S1
VAR S1.EventStartDate MELLAN #7/4/2010# och #7/10/2010#
OCH S1.SaleTypeID = 1 OCH S1.StoreID <> 0 OCH S1.SaleEventStatus <> ”avbryter”) som eDates,
(VALDA DISTINKT S2.salesPersonID FRÅN smd_salesEvent S2
VAR S2.EventStartDate MELLAN #7/4/2010# och #7/10/2010#
OCH S2.SaleTypeID = 1 OCH S2.StoreID <> 0 OCH S2.SaleEventStatus <> ”avbryter”) som ePeople
) som eDatePeople
LÄMNAT SAMMANFOGA smd_salesEvent S3
PÅ eDatePeople.eventStartDate = S3.eventStartDate
OCH eDatePeople.SalesPersonID = S3.SalesPersonID
GRUPP VID eDatePeople.eventStartDate, eDatePeople.SalesPersonID

Detta har två subqueries som väljer det distinkt daterar (eDates) och det distinkt folket (ePeople) som motsvarar till kriterierna som, du har utvalt.  Det därefter sammanfogning som de i ett cartesian sammanfogar (eDatePeople) som ger dig, varje kombination av varje daterar/personen för de kriterier.  Slutligen den sammanfogar eDatePeoplebaksida till smd_SalesEvent för att få räkningen av SalesEventID för varje daterar/personkombination.

Vad den inte gör, är att garantera att du ska har alla av daterar som uppstår mellan din start och avslutar daterar, sedan de andra kriterierna kunde gå nollrekord tillbaka, eller någon underdel av värderar.  Den också går endast rekord för det reafolk tillbaka som har åtminstone ett rekord, som möter dina kriterier.  Om en person är på semester eller inte deltog i någon reahändelse under den specificerade perioden, deras känt som ska för att inte visa upp alls.

Om du skulle något liknande för att se till, att allt daterar under en tid, spänner över gås tillbaka, du kunde använda en bordlägga av daterar för att komma upp med eDatesna portionr av queryen i stället för subqueryen som jag använde.
Andra lösningar  
 
programming4us programming4us