/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
SQL query
Fra : Jesper Frank Nemholt


Dato : 26-05-05 19:51

Hvordan faar jeg lagt disse 2 queries sammen til een :

SELECT to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD'),
COUNT(ITSM_INCIDENTS.INC_ID) FROM ITSM_INCIDENTS, ITSM_WORKGROUPS WHERE
ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD') ORDER BY 1;

SELECT to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD'),
COUNT(ITSM_INCIDENTS.INC_ID) FROM ITSM_INCIDENTS, ITSM_WORKGROUPS WHERE
ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD') ORDER BY 1;

Formatet skulle saa vaere a la :

Dato      Incidents_created   Incidents_finished
2005-01-01   12         5
2005-01-02   0         4
2005-01-03   14         0
2005-01-04   17         9

Problemet er at der ikke er incidents hver dag, og at der heller ikke er
garanti for at der lukkes nogle hver dag, saa jeg har brug for
zero-filling (a la hvad jeg har simuleret i eksemplet) paa de dage hvor
kun een af de 2 er til stede.

/Jesper

 
 
///M (26-05-2005)
Kommentar
Fra : ///M


Dato : 26-05-05 20:22

Jesper Frank Nemholt wrote:
> Hvordan faar jeg lagt disse 2 queries sammen til een :
>
> SELECT to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD'),
> COUNT(ITSM_INCIDENTS.INC_ID) FROM ITSM_INCIDENTS, ITSM_WORKGROUPS
> WHERE ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
> ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
> to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD') ORDER BY 1;
>
> SELECT to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD'),
> COUNT(ITSM_INCIDENTS.INC_ID) FROM ITSM_INCIDENTS, ITSM_WORKGROUPS
> WHERE ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
> ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
> to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD') ORDER BY 1;

Lidt afhængigt af hvilken sql-server du bruger, kender jeg i hvert fald én
mulighed (MS-SQL)
Smid ordet "union" ind i den tomme linie mellem dine query's. Union kræver
at der er lige mange kolonner i hvert statement, hvilket det umiddelbart ser
ud som, det er en fordel hvis de også hedder det samme, ellers benyttes
førstnævnte statement's benævnelse i resultatet.

PS. Hvad gør "order by 1"???

--
Mvh
///M



Jesper Frank Nemholt (27-05-2005)
Kommentar
Fra : Jesper Frank Nemholt


Dato : 27-05-05 06:06

///M wrote:
> Jesper Frank Nemholt wrote:
>
>>Hvordan faar jeg lagt disse 2 queries sammen til een :
>>
>>SELECT to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD'),
>>COUNT(ITSM_INCIDENTS.INC_ID) FROM ITSM_INCIDENTS, ITSM_WORKGROUPS
>>WHERE ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
>>ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
>>to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD') ORDER BY 1;
>>
>>SELECT to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD'),
>>COUNT(ITSM_INCIDENTS.INC_ID) FROM ITSM_INCIDENTS, ITSM_WORKGROUPS
>>WHERE ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
>>ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
>>to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD') ORDER BY 1;
>
>
> Lidt afhængigt af hvilken sql-server du bruger, kender jeg i hvert fald én
> mulighed (MS-SQL)
> Smid ordet "union" ind i den tomme linie mellem dine query's. Union kræver
> at der er lige mange kolonner i hvert statement, hvilket det umiddelbart ser
> ud som, det er en fordel hvis de også hedder det samme, ellers benyttes
> førstnævnte statement's benævnelse i resultatet.

Union er ikke lige det jeg er ude efter, da den blot laver det saaledes :

2005-01-01 5
2005-01-01 7
2005-01-02 3
2005-01-02 9

....og det jeg var ude efter var :

2005-01-01 5 7
2005-01-02 3 9

Derudover saetter den ikke 0 ind paa dage hvor en af de 2 tables ikke
har noget mens den anden har.

> PS. Hvad gør "order by 1"???
>

Sorterer efter foerste.

/Jesper

Nis Jorgensen (28-05-2005)
Kommentar
Fra : Nis Jorgensen


Dato : 28-05-05 21:27

On Thu, 26 May 2005 20:51:25 +0200, Jesper Frank Nemholt
<jfn@dassic.com> wrote:

>Hvordan faar jeg lagt disse 2 queries sammen til een :
>
>SELECT to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD'),
>COUNT(ITSM_INCIDENTS.INC_ID) FROM ITSM_INCIDENTS, ITSM_WORKGROUPS WHERE
>ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
>ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
>to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD') ORDER BY 1;
>
>SELECT to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD'),
>COUNT(ITSM_INCIDENTS.INC_ID) FROM ITSM_INCIDENTS, ITSM_WORKGROUPS WHERE
>ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
>ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
>to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD') ORDER BY 1;
>
>Formatet skulle saa vaere a la :
>
>Dato      Incidents_created   Incidents_finished
>2005-01-01   12         5
>2005-01-02   0         4
>2005-01-03   14         0
>2005-01-04   17         9

Det ligner Oracle. Jeg ville proeve:

SELECT * FROM
(
SELECT to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD') as Dato,
COUNT(ITSM_INCIDENTS.INC_ID) as Incidents_created
FROM ITSM_INCIDENTS, ITSM_WORKGROUPS WHERE
ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
to_char(ITSM_INCIDENTS.REG_CREATED,'YYYY-MM-DD')
) FULL OUTER NATURAL JOIN
(
SELECT to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD') as Dato,
COUNT(ITSM_INCIDENTS.INC_ID) as Incidents_finished
FROM ITSM_INCIDENTS, ITSM_WORKGROUPS WHERE
ITSM_INCIDENTS.INC_ASSIGN_WORKGROUP=ITSM_WORKGROUPS.WOG_OID AND
ITSM_WORKGROUPS.WOG_SEARCHCODE LIKE 'DCSEMOPS-TS-WINDOWS%' GROUP BY
to_char(ITSM_INCIDENTS.INC_ACTUALFINISH,'YYYY-MM-DD')
)

Den vil give dig Nulls i stedet for 0, men det kan du nemt arbejde dig
udenom (kan bare ikke huske hvad Oracle har istedet for COALESCE).
--
Nis Jorgensen
Midlertidigt uden ae oe og aa. Jeg beklager.

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408188
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste