Avatar billede obix Nybegynder
01. april 2005 - 08:39 Der er 10 kommentarer

Avanceret sql

Hej EKsperter.

Jeg har en log tabel hvori at en log for noget kan være over flere linier. Dvs. for at finde ud af om der er fejl i en log skal jeg kigge på flere linier og hvis bare en af dem har en fejl i sig så er der sket fejl for denne log entri.

Hvordan kan jeg lave et udtræk så jeg på den ene linie jeg trækker ud kan se om der er sket fejl på nogle af de andre linier? Kan det lade sig gøre?
Avatar billede arne_v Ekspert
01. april 2005 - 08:43 #1
Lyder meget som om den database skulle have været struktureret anderledes !

Kan du skitsere tabel strukturen lidt mere - ellers bliver det gætværk.
Avatar billede obix Nybegynder
01. april 2005 - 08:48 #2
Databasen skulle helt sikkert have været struktureret anderledes!

LogId,      TransactionId,    ReturnCode,    Type,    MessageId
1          9999111            OK              SEND    999
2          9999111            ERROR          RESPONSE 1000


For ovenstående Transaction vil jeg gerne kunne selecte en rekord men hvor returncoden skal være error fordi der er en fejl i linie to.
Avatar billede soes Nybegynder
01. april 2005 - 09:05 #3
Kan du ikk lave noget i stil med:
SELECT * FROM LOG WHERE TransactionId = 9999111 AND ReturnCode = 'ERROR'

Hvis din forespørgsel ikke kommer med nogle poster retur må det jo være fordi at alle transaktioner er blevet gennemført. Hvis der er nogle rækker retur så er det jo de rækker hvor der er sket en fejl.
Avatar billede arne_v Ekspert
01. april 2005 - 09:06 #4
SELECT DISTINCT TransactionId FROM Log WHERE ReturnCode <> 'OK'
Avatar billede arne_v Ekspert
01. april 2005 - 09:07 #5
SELECT *
FROM Log
WHERE TransactionId IN (SELECT DISTINCT TransactionId FROM Log WHERE ReturnCode <> 'OK')
Avatar billede obix Nybegynder
01. april 2005 - 09:16 #6
Hvis der ikke er nogle fejl vil jeg jo stadig have en række retur. Forestil jer at jeg skal bruge en liste som jeg skal vise til mine brugere. I den liste skal der være en linie per log transaction. Er der en fejl i transactionen skal det kunne ses på den ene linie og er der ingen fejl skal den også vises.

Det er bare for at høre om det kan laves med en sql så jeg får et resultset jeg så bare kan vise eller om jeg er nød til at lave en sql per række efter jeg har lavet mit select.
Avatar billede obix Nybegynder
01. april 2005 - 09:21 #7
LogId,      TransactionId,    ReturnCode,    Type,    MessageId
1          9999111            OK              SEND    999
2          9999111            ERROR          RESPONSE 1000
3          9999112            OK              SEND    1001
4          9999112            ERROR          RESPONSE 1002
5          9999113            OK              SEND    1003
6          9999113            OK            RESPONSE 1004

Når jeg har lavet mit select på ovenstående skulle jeg gerne få følgende
1          9999111            ERROR              SEND    999
3          9999112            ERROR              SEND    1001
5          9999113            OK                SEND    1003
Avatar billede arne_v Ekspert
01. april 2005 - 10:19 #8
Efter hvilket kriterie skal Typ eog MessageId udvælges når der er
flere rækker ?
Avatar billede obix Nybegynder
01. april 2005 - 10:22 #9
ahh doh har lige glemt en ret vigtig kolonne.

LogId,      TransactionId,    ReturnCode,    Type,    MessageId, Member_from
1          9999111            OK              SEND    999        1
2          9999111            ERROR          RESPONSE 1000      1
3          9999112            OK              SEND    1001      2
4          9999112            ERROR          RESPONSE 1002      2
5          9999113            OK              SEND    1003      3
6          9999113            OK            RESPONSE 1004        3

Når jeg har lavet mit select på ovenstående skulle jeg gerne få følgende
1          9999111            ERROR              SEND    999    1
3          9999112            ERROR              SEND    1001    2
5          9999113            OK                SEND    1003    3

Transaction, memberfrom på de to kriterier kan du grupere send og svar
Avatar billede somoe Nybegynder
05. april 2005 - 13:17 #10
Er det noget allá nedenstående du har brug for?

SELECT LogId, TransaktionId, (select top 1 ReturnCode from ErrorLog EL2 where EL1.TransaktionId = EL2.TransaktionId order by ReturnCode) as ReturnCode, Type, MessageId, MemberFrom
FROM        ErrorLog EL1
WHERE Type = 'SEND'
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