Az alábbi lekérdezésekben megmutatom, hogyan lehet tetszőleges rekordszámú listát generálni az SQL rekurzív lekérdezésével.
Az első lekérdezés egy év, hónap listát generál tetszőlegesen megadott 2 dátum között. Továbbá megadjuk az adott hónap első és utolsó napját, illetve hány napból áll a hónap.
Lehetőség van napi bontást készíteni a lekérdezés második felében található DAY(datevalue) előtti két kötőjel eltávolításával.
Ha az eredményt később máshol szeretnénk felhasználni, betehetjük a lekérdezés futásának eredményét egy állandó, vagy átmeneti táblába (#YearMonthTempTable).
WITH mycte AS
(
SELECT CAST('2011-01-01' AS DATETIME) DateValue
UNION ALL
SELECT DateValue + 1
FROM mycte
WHERE DateValue + 1 <= '2030-12-31'
)
SELECT YEAR(datevalue) ev,
MONTH(datevalue) honap,
--DAY(datevalue) nap,
CONVERT(date, min(datevalue)) honap_eleje,
CONVERT(date, max(datevalue)) honap_vege,
CONVERT(numeric(9,0), COUNT(datevalue)) honap_napok_db
--INTO #YearMonthTempTable
FROM mycte
group by YEAR(datevalue), MONTH(datevalue) --,DAY(datevalue)
order by YEAR(datevalue), MONTH(datevalue) --,DAY(datevalue)
OPTION (MAXRECURSION 0)
;
A második, egyszerűbb lekérdezés egy számokból álló listát készít két előre megadott szám között. Az érdekessége ennek az SQL lekérdezésnek, hogy a második oszlopban 0 és 999 közötti véletlen számokat generálunk.
WITH mycte AS
(
SELECT 1 value
UNION ALL
SELECT value + 1
FROM mycte
WHERE value + 1 <= 12
)
SELECT value,
ABS(CHECKSUM(NewId())) % 1000 veletlen_szam
FROM mycte
order by value
OPTION (MAXRECURSION 0)
;
0 megjegyzés:
Megjegyzés küldése