view, cte, abgeleitete, ... Flashcards
drei verschiedene Groupierung
1- GROUP BY GROUPING SETS
( (aufgabe, pr_nr), (aufgabe), (pr_nr), ( ) );
2- GROUP BY CUBE(aufgabe, pr_nr);
3. GROUP BY ROLLUP (aufgabe, pr_nr);
FUNCTION
(erstellen, löschen, aufrufen)
DROP FUNCTION test
CREATE FUNCTION test (@Jahr INT)
RETURNS TABLE
AS
RETURN (
SELECT
YEAR(a.einst_dat) as Jahr,
COUNT(m.m_nr) AS anzahl
FROM Arbeiten a
JOIN …..
WHERE YEAR(a.einst_dat) = @Jahr
GROUP BY YEAR(a.einst_dat)
);
SELECT * FROM test (2013)
nur erste zwei Buchstaben von einer Spallte anzeigen
SELECT LEFT(m_nr,2) FROM Projekt
PIVOT
SELECT *
FROM
(SELECT aufgabe, pr_nr, m_nr FROM Arbeiten) AS x
pivot (
COUNT(m_nr) FOR pr_nr
IN ([p1], [p2], [p3])
) AS xx;
Beispiel abgeleitete Tabelle
SELECT …
count(*) as Anzahl
FROM (
SELECT …. FROM …..
JOIN …. WHERE….
) AS xxx
GROUP BY …..
Fenster Funktion
Vergleich heutige Umsatz und Durchschnitt Umsatz in den letzten 3 Tagen (also heute + 2 Tage vorher)
SELECT tag, umsatz,
AVG(umsatz) OVER(ORDER BY tag ROWS 2 PRECEDING)
AS durchschnit3tag
FROM umsatz;
Fenster Funktion
in jeden Tag Gesamtumsatz bis bisherigen Tag sehen zu können
SELECT tag, umsatz,
SUM(umsatz) OVER(ORDER BY tag) AS gesamtumsatz
FROM umsatz;
Fenster Funktion
Gesamtumsatz pro Projekt
SELECT pr_nr, umsatz,
SUM(umsatz) OVER (PARTITION BY pr_nr) AS gesamtProjekt
FROM umsatz
Funktionen für die vorherige und nächste Zeile
LAG تاخیر, قبلی
LEAD
Fenster Funktionen
heutige Umsatz für Projekt und Vergleich mit Umsatz für das Projekt gestern und morgen
SELECT date, pr_nr, umsatz,
LAG(umsatz) OVER (PARTITION BY pr_nr ORDER BY date) AS gestern_umsatz,
LEAD(umsatz) OVER (PARTITION BY pr_nr ORDER BY date) AS morgen_umsatz
FROM umsatz
Beispiel CTE
WITH CTE AS (
SELECT …
FROM …
JOIN Mitarbeiter m ON m.m_nr = a.m_nr
WHERE …
)
SELECT …
count(*) as Anzahl
FROM CTE
GROUP BY ….;
Monat Differenz Ermitteln
SELECT DATEDIFF(Month, einst_dat, ‘2015-12-31’) as monatsdifferenz
view erstellen, löschen, aufrufen
CREATE VIEW v_test
with encryption, schemabinding
AS
SELECT … FROM …..
DROP VIEW v_test
SELECT * FROM v_test
view ändern
ALTER VIEW v_test
AS
SELECT …
FROM …..
JOIN ….
شماره بندی سطر ها بر اساس یک گروه دلخواه
select *,
ROW_NUMBER() over ( partition by pr-nr order by datum) as Row