2010-11-17 9 views
6

Kann ich eine case-Anweisung in einer HAVING-Klausel in SQL Server 2005 haben?case-Anweisung in having-Klausel in sql

Unten ist meine HAVING Aussage. Es gibt mir einen Syntaxfehler.

@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 

Danke,

Amit

+1

weil Sie die Hälfte eine Frage geschrieben haben. Ich habe die Frage beantwortet, die du ursprünglich gestellt hast. –

+0

@ Mitch-- in Ordnung mein Fehler. Danke für deine Antwort. Ich habe die Frage auch aktualisiert. Bitte geben Sie – Amit

Antwort

17

Beispiel (aus 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

Danke dafür. Ich habe das Stück des Codes hinzugefügt, der mir Syntaxfehler gibt, und ich kann nicht herausfinden, was mit ihm falsch ist. Bitte beraten – Amit

-1

ein weiteres Beispiel von 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)