OVH Cloud OVH Cloud

Case When...

7 réponses
Avatar
Vincent Dartois
Bonjour,

J'ai un soucis avec une requête qui me cause beaucoup de tracas...

Je simplifie ma requête pour expliquer :

SELECT CASE WHEN calculs>=0 THEN 0 ELSE (ICI le problème) END...

je dois retourné le résultat dudit calcul dans le ELSE.

en sachant que calculs, est un ensemble de Sous requêtes basé sur plusieurs
vues, bref je pourrais très bien recolé le calcul dans le ELSE mais c'est
faire 2 fois le travail pour le serveur.
Quel est le moyen de faire au mieux ?

Merci de votre aide.

Vincent.

7 réponses

Avatar
Oliv'
Vincent Dartois que je salut a écrit dans

Bonjour,

J'ai un soucis avec une requête qui me cause beaucoup de tracas...

Je simplifie ma requête pour expliquer :

SELECT CASE WHEN calculs>=0 THEN 0 ELSE (ICI le problème) END...

je dois retourné le résultat dudit calcul dans le ELSE.

en sachant que calculs, est un ensemble de Sous requêtes basé sur
plusieurs vues, bref je pourrais très bien recolé le calcul dans le
ELSE mais c'est faire 2 fois le travail pour le serveur.
Quel est le moyen de faire au mieux ?

Merci de votre aide.

Vincent.



Je suppose que calculs vient d'une requete précédente
Je dirais simplement
SELECT CASE WHEN calculs>=0 THEN 0 ELSE calculs END...

ou alors j'ai pas tout compris


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Avatar
Vincent Dartois
Pour mieux expliquer voici la requête :

SELECT idSousProduit, CASE WHEN (ISNULL
((SELECT lngStockSiege
FROM vStockSiege
WHERE idSousProduit =
tSousProduit.idSousProduit), 0) + ISNULL
((SELECT lngCmdSiegeFourn
FROM vCmdSiegeFourn
WHERE idSousProduit =
tSousProduit.idSousProduit), 0) - ISNULL
((SELECT lngCmdAgenceEnCoursValid
FROM vCmdAgenceEnCoursValid
WHERE idSousProduit =
tSousProduit.idSousProduit), 0)) >= 0 THEN 0 ELSE XXXXX END AS lngACmdFourn
FROM dbo.tSousProduit

Le XXXXX est à remplacer par ce qu'il faut.

nota : mes tables de vues commence par "v"

Merci de votre aide.


"Oliv'" <(supprimerceci) a écrit dans le
message de news: %

Vincent Dartois que je salut a écrit dans

Bonjour,

J'ai un soucis avec une requête qui me cause beaucoup de tracas...

Je simplifie ma requête pour expliquer :

SELECT CASE WHEN calculs>=0 THEN 0 ELSE (ICI le problème) END...

je dois retourné le résultat dudit calcul dans le ELSE.

en sachant que calculs, est un ensemble de Sous requêtes basé sur
plusieurs vues, bref je pourrais très bien recolé le calcul dans le
ELSE mais c'est faire 2 fois le travail pour le serveur.
Quel est le moyen de faire au mieux ?

Merci de votre aide.

Vincent.



Je suppose que calculs vient d'une requete précédente
Je dirais simplement
SELECT CASE WHEN calculs>=0 THEN 0 ELSE calculs END...

ou alors j'ai pas tout compris


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



Avatar
Faust
et pourquoi pas simplement:

select calculs as tonchamp, case tonchamp>=0 then 0 else tonchamps end?

/_Vincent Dartois_ a exprimé avec précision/ :
Bonjour,

J'ai un soucis avec une requête qui me cause beaucoup de tracas...

Je simplifie ma requête pour expliquer :

SELECT CASE WHEN calculs>=0 THEN 0 ELSE (ICI le problème) END...

je dois retourné le résultat dudit calcul dans le ELSE.

en sachant que calculs, est un ensemble de Sous requêtes basé sur plusieurs
vues, bref je pourrais très bien recolé le calcul dans le ELSE mais c'est
faire 2 fois le travail pour le serveur.
Quel est le moyen de faire au mieux ?

Merci de votre aide.

Vincent.



--
Mephitiquement votre,
Faust
ICQ #161252577
Avatar
Faust
quelque chose comme ça?

SELECT idSousProduit, (ISNULL
((SELECT lngStockSiege
FROM vStockSiege
WHERE idSousProduit tSousProduit.idSousProduit), 0) + ISNULL
((SELECT lngCmdSiegeFourn
FROM vCmdSiegeFourn
WHERE idSousProduit tSousProduit.idSousProduit), 0) - ISNULL
((SELECT lngCmdAgenceEnCoursValid
FROM vCmdAgenceEnCoursValid
WHERE idSousProduit tSousProduit.idSousProduit), 0)) AS calclngACmdFourn,
CASE WHEN calclngACmdFourn >= 0 THEN 0 ELSE calclngACmdFourn END AS
lngACmdFourn

FROM dbo.tSousProduit

--
Mephitiquement votre,
Faust
ICQ #161252577
Avatar
Vincent Dartois
J'avais déja essayé ceci, il me semble l'avoir déja fais en Mysql et que ca
fonctionnait, mais il semble que sous SQL server on ne puisse réutiliser
directement un alias.

voici l'erreur retournée :

'calclngACmdFourn' : nom de colonne incorrect.


nota : Version de SQL Server : 2000.




"Faust" a écrit dans le message de news:

quelque chose comme ça?

SELECT idSousProduit, (ISNULL
((SELECT lngStockSiege
FROM vStockSiege
WHERE idSousProduit > tSousProduit.idSousProduit), 0) + ISNULL
((SELECT lngCmdSiegeFourn
FROM vCmdSiegeFourn
WHERE idSousProduit > tSousProduit.idSousProduit), 0) - ISNULL
((SELECT lngCmdAgenceEnCoursValid
FROM vCmdAgenceEnCoursValid
WHERE idSousProduit > tSousProduit.idSousProduit), 0)) AS calclngACmdFourn,
CASE WHEN calclngACmdFourn >= 0 THEN 0 ELSE calclngACmdFourn END AS
lngACmdFourn

FROM dbo.tSousProduit

--
Mephitiquement votre,
Faust
ICQ #161252577



Avatar
Benoit
A mon avis, 2 solutions (à tester) possibles :

SELECT t1.idSousProduit, CASE WHEN t1.col2 >= 0 THEN 0 ELSE t1.col2 END
AS lngACmdFourn
FROM (SELECT idSousProduit, (ISNULL
((SELECT lngStockSiege
FROM vStockSiege
WHERE idSousProduit tSousProduit.idSousProduit), 0) + ISNULL
((SELECT lngCmdSiegeFourn
FROM vCmdSiegeFourn
WHERE idSousProduit tSousProduit.idSousProduit), 0) - ISNULL
((SELECT lngCmdAgenceEnCoursValid
FROM vCmdAgenceEnCoursValid
WHERE idSousProduit tSousProduit.idSousProduit), 0)) AS col2
FROM dbo.tSousProduit) t1

OU

SELECT idSousProduit, CASE WHEN (ISNULL(lngStockSiege,0) -
ISNULL(lngCmdSiegeFourn,0) - ISNULL(lngCmdAgenceEnCoursValid,0) >= 0 THEN 0
ELSE (ISNULL(lngStockSiege,0) - ISNULL(lngCmdSiegeFourn,0) -
ISNULL(lngCmdAgenceEnCoursValid,0) END
FROM tSousProduit
LEFT OUTER JOIN vStockSiege ON tSousProduit.idSousProduit =
vStockSiege.idSousProduit
LEFT OUTER JOIN vCmdSiegeFourn ON tSousProduit.idSousProduit = ...
LEFT OUTER JOIN vCmdAgenceEnCoursValid ON tSousProduit.idSousProduit = ...



--
Benoit

"Vincent Dartois" a écrit dans le message de news:
%
Pour mieux expliquer voici la requête :

SELECT idSousProduit, CASE WHEN (ISNULL
((SELECT lngStockSiege
FROM vStockSiege
WHERE idSousProduit =
tSousProduit.idSousProduit), 0) + ISNULL
((SELECT lngCmdSiegeFourn
FROM vCmdSiegeFourn
WHERE idSousProduit =
tSousProduit.idSousProduit), 0) - ISNULL
((SELECT lngCmdAgenceEnCoursValid
FROM vCmdAgenceEnCoursValid
WHERE idSousProduit =
tSousProduit.idSousProduit), 0)) >= 0 THEN 0 ELSE XXXXX END AS
lngACmdFourn
FROM dbo.tSousProduit

Le XXXXX est à remplacer par ce qu'il faut.

nota : mes tables de vues commence par "v"

Merci de votre aide.


"Oliv'" <(supprimerceci) a écrit dans le
message de news: %

Vincent Dartois que je salut a écrit dans

Bonjour,

J'ai un soucis avec une requête qui me cause beaucoup de tracas...

Je simplifie ma requête pour expliquer :

SELECT CASE WHEN calculs>=0 THEN 0 ELSE (ICI le problème) END...

je dois retourné le résultat dudit calcul dans le ELSE.

en sachant que calculs, est un ensemble de Sous requêtes basé sur
plusieurs vues, bref je pourrais très bien recolé le calcul dans le
ELSE mais c'est faire 2 fois le travail pour le serveur.
Quel est le moyen de faire au mieux ?

Merci de votre aide.

Vincent.



Je suppose que calculs vient d'une requete précédente
Je dirais simplement
SELECT CASE WHEN calculs>=0 THEN 0 ELSE calculs END...

ou alors j'ai pas tout compris


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~







Avatar
Vincent Dartois
Grand Merci !

voici finalement ce que j'ai pris, en y ajoutant mon ABS ;-) :

SELECT idSousProduit, CASE WHEN t1.col2 >= 0 THEN 0 ELSE ABS(t1.col2)
END AS lngACmdFourn
FROM (SELECT idSousProduit, (ISNULL
((SELECT lngStockSiege
FROM
vStockSiege
WHERE
idSousProduit = tSousProduit.idSousProduit), 0) + ISNULL
((SELECT
lngCmdSiegeFourn
FROM
vCmdSiegeFourn
WHERE
idSousProduit = tSousProduit.idSousProduit), 0) - ISNULL
((SELECT
lngCmdAgenceEnCoursValid
FROM
vCmdAgenceEnCoursValid
WHERE
idSousProduit = tSousProduit.idSousProduit), 0)) AS col2
FROM dbo.tSousProduit) t1

J'aurais dût penser à refaire un select de l'ensemble...


"Benoit" a écrit dans le message de news:
%23Y8s4$
A mon avis, 2 solutions (à tester) possibles :

SELECT t1.idSousProduit, CASE WHEN t1.col2 >= 0 THEN 0 ELSE t1.col2 END
AS lngACmdFourn
FROM (SELECT idSousProduit, (ISNULL
((SELECT lngStockSiege
FROM vStockSiege
WHERE idSousProduit > tSousProduit.idSousProduit), 0) + ISNULL
((SELECT lngCmdSiegeFourn
FROM vCmdSiegeFourn
WHERE idSousProduit > tSousProduit.idSousProduit), 0) - ISNULL
((SELECT lngCmdAgenceEnCoursValid
FROM vCmdAgenceEnCoursValid
WHERE idSousProduit > tSousProduit.idSousProduit), 0)) AS col2
FROM dbo.tSousProduit) t1

OU

SELECT idSousProduit, CASE WHEN (ISNULL(lngStockSiege,0) -
ISNULL(lngCmdSiegeFourn,0) - ISNULL(lngCmdAgenceEnCoursValid,0) >= 0 THEN
0 ELSE (ISNULL(lngStockSiege,0) - ISNULL(lngCmdSiegeFourn,0) -
ISNULL(lngCmdAgenceEnCoursValid,0) END
FROM tSousProduit
LEFT OUTER JOIN vStockSiege ON tSousProduit.idSousProduit =
vStockSiege.idSousProduit
LEFT OUTER JOIN vCmdSiegeFourn ON tSousProduit.idSousProduit = ...
LEFT OUTER JOIN vCmdAgenceEnCoursValid ON tSousProduit.idSousProduit =
...



--
Benoit

"Vincent Dartois" a écrit dans le message de
news: %
Pour mieux expliquer voici la requête :

SELECT idSousProduit, CASE WHEN (ISNULL
((SELECT lngStockSiege
FROM vStockSiege
WHERE idSousProduit =
tSousProduit.idSousProduit), 0) + ISNULL
((SELECT lngCmdSiegeFourn
FROM vCmdSiegeFourn
WHERE idSousProduit =
tSousProduit.idSousProduit), 0) - ISNULL
((SELECT lngCmdAgenceEnCoursValid
FROM vCmdAgenceEnCoursValid
WHERE idSousProduit =
tSousProduit.idSousProduit), 0)) >= 0 THEN 0 ELSE XXXXX END AS
lngACmdFourn
FROM dbo.tSousProduit

Le XXXXX est à remplacer par ce qu'il faut.

nota : mes tables de vues commence par "v"

Merci de votre aide.


"Oliv'" <(supprimerceci) a écrit dans le
message de news: %

Vincent Dartois que je salut a écrit dans

Bonjour,

J'ai un soucis avec une requête qui me cause beaucoup de tracas...

Je simplifie ma requête pour expliquer :

SELECT CASE WHEN calculs>=0 THEN 0 ELSE (ICI le problème) END...

je dois retourné le résultat dudit calcul dans le ELSE.

en sachant que calculs, est un ensemble de Sous requêtes basé sur
plusieurs vues, bref je pourrais très bien recolé le calcul dans le
ELSE mais c'est faire 2 fois le travail pour le serveur.
Quel est le moyen de faire au mieux ?

Merci de votre aide.

Vincent.



Je suppose que calculs vient d'une requete précédente
Je dirais simplement
SELECT CASE WHEN calculs>=0 THEN 0 ELSE calculs END...

ou alors j'ai pas tout compris


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~