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

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