/ 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
CROSS-TAB Query ?
Fra : Jesper Stocholm


Dato : 27-07-01 20:56

Jeg har nogle data i et par tabeller, som jeg gerne vil samle i en query.
Data ser således ud:


Table: SEGMENT_DEFINITION

Segment_Id | Segment_desc
-------------------------
1 Phone
2 Account
3 Access
4 Country
5 IMSI
6 IMEI
7 Party

Table: ALARM_SEGMENT

Alarm_Id | Segment_Id (FK)
----------------------------
5 2
5 6
5 1
5 3
5 4


Jeg vil gerne samle disse data i en forespørgsel, så jeg for hver Segment_ID
kan se, om alarm med Alarm_Id = 5 er i dette segment.

Resultatet skal altså være:

Table: res_SEG_ALARM

Segment_Id | Segment_Desc | IsAlarm
-----------------------------------
1 Phone 1
2 Account 1
3 Access 1
4 Country 1
5 IMSI 0
6 IMEI 1
7 Party 0


Men jeg kan ikke hitte ud af, hvordan jeg skal lave min forespørgsel.

Databasen er MSSQL (faktisk er det TeraData, men jeg hvis man holder sig til
ANSI-SQL skulle det vist ikke betyde noget).

På forhånd tak.

--
.... der søger lejlighed fremleje/leje i Københavnsområdet. Max. kr. 3500 om
måneden alt inklusive.

- Jesper Stocholm - http://stocholm.dk

 
 
Kim Brandt Jensen /L~ (02-08-2001)
Kommentar
Fra : Kim Brandt Jensen /L~


Dato : 02-08-01 12:08

Select *, 1 from
segement_definition sdef
where exists (select 1 from alarm_segment aseg where sdef.segment_id =
aseg.segment_id and
alarm_id=5)
Union
Select *, 0 from
segement_definition sdef
where not exists (select 1 from alarm_segment aseg where sdef.segment_id =
aseg.segment_id and alarm_id=5)

Med venlig hilsen

Kim Brandt Jensen
Kim@LO.DK


Jesper Stocholm (02-08-2001)
Kommentar
Fra : Jesper Stocholm


Dato : 02-08-01 22:46

"Kim Brandt Jensen /LO" <kim_brandt_jensen@lo.dk> wrote in
news:fc.0073fb6b035b9fbd3b9aca006a58a3b8.35ba031@net.dialog.dk:

> Select *, 1 from
> segement_definition sdef
> where exists (select 1 from alarm_segment aseg where sdef.segment_id =
> aseg.segment_id and
> alarm_id=5)
> Union
> Select *, 0 from
> segement_definition sdef
> where not exists (select 1 from alarm_segment aseg where
> sdef.segment_id = aseg.segment_id and alarm_id=5)
>

Tak for dit svar ... jeg fandt dog i mellemtiden en anden løsning på mit
lille problem - nemlig

select
d.Segment_Id
, d.Segment_Desc
, case when a.Segment_ID is null then 0 else 1 end as IsAlarm
from
SEGMENT_DEFINITION d
left join
(SELECT Segment_Id FROM ALARM_SEGMENT WHERE Alarm_Id = 5) a on
a.Segment_Id = d.Segment_Id

Din løsning er dog mere "tanke-tro", dvs den udfører forespørgslen på samme
måde, som jeg forestillede mig den skulle udføres - hvorimod min anden
løsning er lidt mere "black-box" agtig.



Hvilken der performance-mæssigt er den bedste er jeg ikke klar over.
--
Jesper Stocholm
http://stocholm.dk
ICQ: 13214885
MSN Messenger: jesperstocholm at hotmail dot com

Søg
Reklame
Statistik
Spørgsmål : 177517
Tips : 31968
Nyheder : 719565
Indlæg : 6408636
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste