Toon posts:

[SQL] Query met IF

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heb een probleem met een sql query

Ik maak gebruik van een MSSQL database

Het is de bedoeling dat ik uit de tabel rsRequests het RequestId krijg met daar naast een kolom Status die open of geloten kan zijn

Open is hij als rsActions.StdActionId 1 vaker voor komt als rsActions.StdActionId 2 en anders is hij gesloten

dit zijn me tabellen

rsActions
ActionId (pk)
RequestId
StdActionId

rsRequests
RequestId (pk)
UserId

Mischien dat het dmv deze niet werkende query van duidelijker wordt :P
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE @CustomerId Int
SET @CustomerId = 1001

SELECT DISTINCT(r.RequestId) AS Verzoek, 

IF (SELECT COUNT(*) FROM rsActions WHERE StdActionId = 1 AND RequestId = r.RequestId) > (SELECT COUNT(*) FROM rsActions WHERE StdActionId = 2 AND RequestId = r.RequestId)
 'Open' AS Status
ELSE
 'Geloten' As Status

FROM rsRequests r

WHERE r.CustomerId = @CustomerId


Het is een beetje vaag maar zo willen ze het hier nou eenmaal :P

[ Voor 4% gewijzigd door Verwijderd op 03-06-2005 15:50 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:59
.

[ Voor 100% gewijzigd door whoami op 03-06-2005 15:39 ]

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:59
Eh, ja, tuurlijk dat die query niet werkt.
Je begint hier een beetje teveel SQL code met PL code te mixen.

Je zult een User Defined Function moeten maken denk ik. Die UDF neemt dan een id, en in die functie ga je dan gaan kijken of het aantal gesloten > aantal open.

Over welke database gaat het trouwens ? (Staat vermeld in de FAQ dat je dat erbij moet zetten, als het geen 'algemene' SQL vraag is.

[ Voor 21% gewijzigd door whoami op 03-06-2005 15:45 ]

https://fgheysels.github.io/


  • BovenHond
  • Registratie: Februari 2002
  • Laatst online: 12:14
code:
1
2
3
4
5
6
7
8
9
10
DECLARE @CustomerId Int
SET @CustomerId = 1001

SELECT DISTINCT(r.RequestId) AS Verzoek, 

IIF (SELECT COUNT(*) FROM rsActions WHERE StdActionId = 1 AND RequestId = r.RequestId > (SELECT COUNT(*) FROM rsActions WHERE StdActionId = 2 AND RequestId = r.RequestId);'Open'; 'Geloten') As Status

FROM rsRequests r

WHERE r.CustomerId = @CustomerId



zo misschien

[ Voor 10% gewijzigd door BovenHond op 03-06-2005 15:52 ]


Verwijderd

Topicstarter
whoami schreef op vrijdag 03 juni 2005 @ 15:44:
Over welke database gaat het trouwens ? (Staat vermeld in de FAQ dat je dat erbij moet zetten, als het geen 'algemene' SQL vraag is.
Ow sorry staat erbij nu, gebruik MSSQL

Zal kijken of ik wat kan vinden over UDF

Werkt niet BovenHond :(

[ Voor 7% gewijzigd door Verwijderd op 03-06-2005 15:55 ]


  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

dat kan met een CASE statement:
semi-pseudo

SELECT DISTINCT(r.RequestId) AS Verzoek, CASE
WHEN
(SELECT COUNT(*) FROM rsActions WHERE StdActionId = 1 AND RequestId = r.RequestId) >
(SELECT COUNT(*) FROM rsActions WHERE StdActionId = 2 AND RequestId = r.RequestId)
THEN
'Open' AS Status
ELSE
'Geloten' As Status

FROM rsRequests r

etc.

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


Verwijderd

Topicstarter
:D werkt met dat CASE

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT DISTINCT(r.RequestId) AS Verzoek,
CASE
   WHEN
      (SELECT COUNT(*) FROM rsActions WHERE StdActionId = 1 AND RequestId = r.RequestId) > 
      (SELECT COUNT(*) FROM rsActions WHERE StdActionId = 2 AND RequestId = r.RequestId)
   THEN
      'Open'
   ELSE
      'Geloten'
END AS Status
FROM rsRequests r ORDER BY r.RequestId DESC


Thx! 8)

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

noprob,
Heb altijd een SQL pocket Guide liggen van O'Reilly.. Kost een 10tje, geld meer dan waard.

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.

Pagina: 1