2010-11-17 8 views
6

Puis-je avoir une instruction case dans une clause HAVING dans SQL Server 2005?instruction case dans having clause in sql

Voici ma déclaration HAVING. Cela me donne une erreur de syntaxe.

@CLIENTPK_NEW IS NULL OR 
    (
     CLIENT.OH_PK = @CLIENTPK_NEW and 
     CASE WHEN @RelatedOrgs <> '11' then CLIENT.OH_PK= @CLIENTPK_NEW 
     ELSE CLIENT.OH_PK in (
      SELECT dbo.OrgHeader.OH_PK FROM dbo.OrgHeader WITH (NOLOCK) INNER JOIN 
      dbo.OrgRelatedParty WITH (NOLOCK) ON dbo.OrgHeader.OH_PK = dbo.OrgRelatedParty.PR_OH_Parent INNER JOIN 
      dbo.OrgHeader AS OrgHeader_1 WITH (NOLOCK) ON dbo.OrgRelatedParty.PR_OH_RelatedParty = OrgHeader_1.OH_PK 
      where OrgHeader_1.OH_PK = @CLIENTPK_NEW 
     ) 
     END 
    ) 
} 
AND (@CGNEEPK IS NULL OR CGNEE.OH_PK = @CGNEEPK) AND  
part.OP_RH_NKCommodityCode = @type 

Merci,

Amit

+1

parce que vous avez écrit une demi-question. J'ai répondu à la question que vous avez posée à l'origine. –

+0

@ Mitch-- bien mon erreur. Merci pour votre réponse. J'ai également mis à jour la question. S'il vous plaît aviser – Amit

Répondre

17

Exemple (à partir here):

USE AdventureWorks2008R2; 
GO 
SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate 
FROM HumanResources.Employee AS e 
JOIN HumanResources.EmployeePayHistory AS ph1 
    ON e.BusinessEntityID = ph1.BusinessEntityID 
GROUP BY JobTitle 
HAVING (MAX(CASE WHEN Gender = 'M' 
     THEN ph1.Rate 
     ELSE NULL END) > 40.00 
    OR MAX(CASE WHEN Gender = 'F' 
     THEN ph1.Rate 
     ELSE NULL END) > 42.00) 
ORDER BY MaximumRate DESC; 
+0

Merci pour cela. J'ai ajouté le morceau de code qui me donne une erreur de syntaxe et je n'arrive pas à comprendre ce qui ne va pas. s'il vous plaît donnez votre avis – Amit

-1

un autre exemple de here..

SELECT EmployeeName ,Country,CompanyPlant,Gender, Total=MAX(PayScale) 
FROM Employee 
GROUP BY EmployeeName ,Country,CompanyPlant,Gender 
HAVING (MAX(CASE WHEN Gender = 'Male' 
THEN PayScale 
ELSE NULL END) > 150.00 
OR MAX(CASE WHEN Gender = 'Female' 
THEN PayScale 
ELSE NULL END) > 180.00) 
Questions connexes