sql >> Database teknologi >  >> RDS >> Sqlserver

t-sql-forespørgsel mellem en tabel over begivenheder og et datointerval

Det, du leder efter, kaldes almindeligvis en krydstabuleringsforespørgsel. Hvis det, du spørger, er, hvordan man opbygger en krydstabulatorforespørgsel givet en statisk liste over kolonner, kan du gøre sådan noget:

Select Title
    , Min( Case When DatePart(mm, [Date]) = 7 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Jul-10]
    , Min( Case When DatePart(mm, [Date]) = 8 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Aug-10]   
    , Min( Case When DatePart(mm, [Date]) = 9 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Sep-10]       
    ...
From Table
Where [Date] Between @StartDate And @EndDate
Group By Title

På samme måde kan du bruge PIVOT-funktionaliteten som foreslået af Broken Link. Men både ovenstående løsning og PIVOT-funktionaliteten er afhængig af statisk kolonneerklæringer. Hvis det, du ønsker, er en dynamisk liste over kolonner (også kaldet dynamisk krydstabel), så er du uden for grænserne af, hvad T-SQL primært er designet til at gøre. Det er muligt med noget fjollet dynamisk SQL, men det er skørt og besværligt. I stedet bør du opbygge resultatsættet i en mellemtrinskomponent eller bruge et rapporteringsværktøj, der opbygger krydstabelresultater.



  1. Entity Framework - Mange til mange?

  2. Konverter MySQL's POINT til tekst i PHP

  3. Flere databaser med lidt skiftende modeller. Hvordan tillader jeg 'EF' at arbejde med forskellige databasestrukturer under kørsel?

  4. Postgres - Træk en kopi af en hel DB fra en ekstern server til lokal udviklermaskine