|
| 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.
| |
|
|