Avatar billede prhan Juniormester
01. september 2014 - 12:17 Der er 10 kommentarer og
1 løsning

Modificering af SQL

Jeg har følgende simple forespørgsel:

SELECT    site_id AS Lokalitetsnr,
        init AS Sagsbehandler,
        site_events.event_type_id AS Historikkode,
        event_types.event_type_name AS Sagsforløb,
        CONVERT(VARCHAR(10),site_events.start_date, 105) AS StartDato,
        CONVERT(VARCHAR(10),site_events.end_date, 105) AS SlutDato

FROM    Site JOIN site_events
            ON Site.site_seq_no = site_events.site_seq_no
        JOIN event_types
            ON site_events.event_type_id = event_types.event_type_id

WHERE    site_events.event_type_id IN ('50.021','21.005')
        AND (YEAR(site_events.start_date) >= 2012
        OR    YEAR(site_events.end_date) >= 2014)

Denne kunne f.eks. give følgende output:

Lokalitetsnr    Sagsbehandler    Historikkode    Sagsforløb    StartDato    SlutDato
111-11111    RPED    50.021    1-års undersøgelse, anmodning    24-07-2013    26-07-2013
111-11111    RPED    21.005    Udarbejdelse af afgørelse    18-08-2014    19-08-2014

Hvorledes ændrer jeg min forespørgsel så jeg får følgende resultat?

Lokalitetsnr.    Sagsbehandler    "Anmodning
(50.021)
startdato"    "Udarbejdelse af afgørelse
(21.005)SlutDato"
259-20067    RPED        24-07-2013            19-08-2014
Avatar billede Slettet bruger
01. september 2014 - 14:36 #1
Kunne være noget ligende dette:

select Lokalitetsnr
,SubString(Sagsbehandler,1,4) Sagsbehandler
,min(StartDato) Start, max(SlutDato) Slut
from (
.... dit select ...
) s1
group by s1.Lokalitetsnr, SubString(Sagsbehandler,1,4)
Avatar billede prhan Juniormester
02. september 2014 - 15:15 #2
Jeg kan ikke rigtigt få det til at virke.

Er det ikke overflødigt at bruge substring her?
Avatar billede prhan Juniormester
02. september 2014 - 15:39 #3
Startdato skal kun være for event_type_id = '50.021' og slutdato kun for event_type_id = '21.005'.

Resultatet skal altså groft sagt vises i skema i stedet for i tabelvisning.
Avatar billede Slettet bruger
02. september 2014 - 15:48 #4
SubString var for at få sagsbehandler.

select Lokalitetsnr
,min(case when Historikkode = '50.021' then StartDato end) Start
,max(case when Historikkode = '21.00' then SlutDato end) Slut
from (
.... dit select ...
) s1
group by s1.Lokalitetsnr
Avatar billede prhan Juniormester
02. september 2014 - 16:25 #5
Jeg er nået frem til følgende, men det virker ikke helt:

SELECT    Lokalitetsnr,
        SUBSTRING(Sagsbehandler,1,4) AS Sagsbehandler,
        MIN(CASE WHEN Historikkode = '50.021' THEN StartDato END) AS "Anmodning (50.021) start dato",
        MAX(CASE WHEN Historikkode = '21.005' THEN SlutDato END) AS "Udarbejdelse af afgørelse (21.005) sendt den"

FROM    (SELECT    site_id AS Lokalitetsnr,
        init AS Sagsbehandler,
        CONVERT(VARCHAR(10),site_events.start_date, 105) AS StartDato,
        CONVERT(VARCHAR(10),site_events.end_date, 105) AS SlutDato,

FROM    Site JOIN site_events
            ON Site.site_seq_no = site_events.site_seq_no
        JOIN event_types
            ON site_events.event_type_id = event_types.event_type_id

WHERE    site_events.event_type_id IN ('50.021','21.005')
        AND (YEAR(site_events.start_date) >= 2012
        OR    YEAR(site_events.end_date) >= 2014) AS s1
       
GROUP BY s1.Lokalitetsnr, Sagsbehandler
Avatar billede Slettet bruger
02. september 2014 - 23:37 #6
Jeg tror du skal have substring med i group by - altså:  Lokalitetsnr, SUBSTRING(Sagsbehandler,1,4)
Avatar billede prhan Juniormester
04. september 2014 - 08:46 #7
Nu tror jeg næsten den er ved at være der. Jeg kan bare ikke få datoer [Udarbejdelse af afgørelse (21.005) sendt den]. Alle værdierne er null. Der skal vises en dato inden for Lokalitetsnr, hvis der er en dato i [Anmodning (50.021) start dato].

SELECT    Lokalitetsnr,
        MIN(CASE WHEN Historikkode = '50.021' THEN StartDato END) AS [Anmodning (50.021) start dato],
        MAX(CASE WHEN Historikkode = '21.005' THEN SlutDato END) AS [Udarbejdelse af afgørelse (21.005) sendt den]

FROM    (    SELECT    site_id AS Lokalitetsnr,
            CONVERT(VARCHAR(10),site_events.start_date, 105) AS StartDato,
            CONVERT(VARCHAR(10),site_events.end_date, 105) AS SlutDato,
            site_events.event_type_id AS Historikkode
            FROM    Site JOIN site_events
                        ON Site.site_seq_no = site_events.site_seq_no
            WHERE    site_events.event_type_id IN ('50.021','21.005')
                    AND (YEAR(site_events.start_date) >= 2012 OR    YEAR(site_events.end_date) >= 2014)
                    )    AS s1
                   
WHERE    (CASE WHEN Historikkode = '50.021' THEN StartDato END) IS NOT NULL
       
GROUP BY Lokalitetsnr
Avatar billede Slettet bruger
04. september 2014 - 10:28 #8
WHERE (CASE WHEN Historikkode = '50.021' THEN StartDato END) IS NOT NULL
- dur ikke
Avatar billede prhan Juniormester
04. september 2014 - 10:56 #9
Ok, men har du så nogle forslag til hvorledes jeg får vist data fra

Lokalitetsnr    Historikkode    StartDato    SlutDato
111-11111        50.021        24-07-2013    26-07-2013
111-11111        21.005        18-08-2014    19-08-2014
111-11112    50.021        01-04-2014    null

til

Lokalitetsnr    "Anmodning(50.021)startdato"    "Udarbejdelse af afgørelse(21.005)SlutDato"
111-11111        24-07-2013                    19-08-2014
111-11112    01-04-2014           

Alle datoer i "Anmodning(50.021)startdato" skal have en dato, mens "Udarbejdelse af afgørelse(21.005)SlutDato" er både datoer og null værdier.
Avatar billede prhan Juniormester
04. september 2014 - 10:56 #10
Hvad kalder man iøvrigt denne form for sql, hvor resultatet skal vises i skema?
Avatar billede prhan Juniormester
23. september 2014 - 10:36 #11
Den her virker sådan set fint, men kan jeg undgå at få de poster hvor MIN(CASE WHEN Historikkode = '50.021' THEN StartDato END) AS [Anmodning (50.021) start dato] er NULL med i udtrækket?

SELECT    Lokalitetsnr,
        MIN(CASE WHEN Historikkode = '50.021' THEN StartDato END) AS [Anmodning (50.021) start dato],
        MAX(CASE WHEN Historikkode = '21.005' THEN SlutDato END) AS [Udarbejdelse af afgørelse (21.005) sendt den]

FROM    (    SELECT    site_id AS Lokalitetsnr,
            CONVERT(VARCHAR(10),site_events.start_date, 105) AS StartDato,
            CONVERT(VARCHAR(10),site_events.end_date, 105) AS SlutDato,
            site_events.event_type_id AS Historikkode
            FROM    Site JOIN site_events
                        ON Site.site_seq_no = site_events.site_seq_no
            WHERE    site_events.event_type_id IN ('50.021','21.005')
                    AND (YEAR(site_events.start_date) >= 2012 OR    YEAR(site_events.end_date) >= 2014)
                    )    AS s1

GROUP BY Lokalitetsnr
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester