SQL scripts

<< Click to Display Table of Contents >>

Navigation:  NeoBase-opgørelser & replikat database >

SQL scripts

Previous pageReturn to chapter overviewNext page

Samlede eller sammenkædede SQL-udtryk

Flere SQL-udtryk kan sammenstilles til såkaldte "SQL scripts" til afvikling i samme kørsel som enten relaterede eller ikke-relaterede udtryk.
Ved sammenstilling af udtryk, skal hvert af disse (del)udtryk afsluttes med et semikolon:

SQL-udtryk 1;
SQL-udtryk 2;

Sammenstillede ikke-relaterede udtryk (kan afvikles uafhængigt af hinanden)

F.eks.:

DROP TABLE Tabelnavn1;
DROP TABLE Tabelnavn2;

Sammenkædede (dvs. relaterede) udtryk

Og hér relaterede udtryk sammenkædede udtryk via (in Memory) tabellen MEMORY Temp:

/* Angtal børn per fødselsårgang med GA <32 født år 2000 - 2017, der har fået antibiotika og hver kun tæller een gang hvis indlagt flere gange */

SELECT DISTINCT n2.PersonId
INTO MEMORY Temp
FROM Neobase2 AS n2
WHERE n2.[Systemisk antibiotisk beh.] IN ('1', '2', '3');

SELECT EXTRACT(YEAR FROM np.Fodselsdato) AS "Fødselsår", COUNT(*) AS "Antal børn GA<32 +AB"
FROM NeoPers AS np
 JOIN MEMORY Temp AS mt
 ON np.PersonID = mt.PersonId
WHERE (np.[GA hele uger] < 32)
 AND (EXTRACT(YEAR FROM np.Fodselsdato) BETWEEN 2010 AND 2017)
GROUP BY [Fødselsår]
ORDER BY [Fødselsår];

Eller som hér tre relaterede sammenkædede udtryk via (in Memory) tabellerne MEMORY Temp og MEMORY Temp2:

/* Antal børn, der har fået antibiotika uanset indikation, og som hver kun tæller én gang hvis indlagt flere gange */

SELECT CASE
  WHEN np."GA hele uger" < 32 THEN '0: GA < 32'
  WHEN np."GA hele uger" >= 32 AND np."GA hele uger" < 35 THEN '1: GA 32-34'
  WHEN np."GA hele uger" >= 35 AND np."GA hele uger" < 99 THEN '2: GA >= 35'
  WHEN np."GA hele uger" = 99 THEN 'U: GA ukendt'
 END AS "GA gruppe",
 np.PersonId
INTO MEMORY Temp
FROM NeoPers np;

SELECT DISTINCT n2.PersonId
INTO MEMORY Temp2
FROM NeoBase2 n2, NeoPers np
WHERE n2.PersonId = np.PersonId AND
 EXTRACT(YEAR FROM np.Fodselsdato) BETWEEN 2010 AND 2017
 AND n2."Systemisk antibiotisk beh." IN ('1', '2', '3');

SELECT mt.[GA gruppe], COUNT(mt.PersonId) AS "Antal børn +AB 2010-2017"
FROM
 MEMORY Temp AS mt
 JOIN MEMORY Temp2 AS mt2
 ON mt.PersonId = mt2.PersonId
GROUP BY mt.[GA gruppe]
UNION
SELECT
 'Z: Sum' AS "GA gruppe", COUNT(mt2.PersonId)
FROM
 MEMORY Temp2 AS mt2
ORDER BY
 [GA gruppe];

Læg mærke til hvordan det øverste CASE statement genererer betingede men ikke beregnede værdier som f.eks. '0: GA < 32', der som strengværdier derfor sættes i enkelte anførselstegn, og hvor de indledende karakterer ('0:', '1:', '2:', etc.) bidrager til disse gruppebetegnelsers ønskede sortering.

Se også SQL-aggregationer, SQL MEMORY mellemlagringer samt SQL-reference SQL Aggregate Functions.

_____________________________

27-10-2017 - © 2003-2017 Niels Knabe