2010-11-17 8 views
6

में खंड होने में केस स्टेटमेंट SQL सर्वर 2005 में HAVING खंड में कोई केस स्टेटमेंट हो सकता है?एसक्यूएल

नीचे मेरा HAVING कथन है। यह मुझे एक वाक्यविन्यास त्रुटि दे रहा है।

@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 

धन्यवाद,

अमित

+1

क्योंकि आप आधे से एक सवाल लिखा से। मैंने आपके द्वारा मूल रूप से पूछे गए प्रश्न का उत्तर दिया। –

+0

@ मिच - ठीक मेरी गलती। आपके जवाब के लिए धन्यवाद। मैंने सवाल भी अपडेट किया है। कृपया – Amit

उत्तर

17

(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

सलाह दें कि इसके लिए धन्यवाद। मैंने कोड का टुकड़ा जोड़ा है जो मुझे सिंटैक्स त्रुटि दे रहा है और मैं यह नहीं समझ सकता कि इसमें क्या गलत है। कृपया सलाह दें – Amit

3

हाँ, वह मान्य सिंटैक्स है। हालांकि, the text, image, and ntext data types cannot be used in a HAVING clause

अपडेट: आपका अपडेट किया गया उदाहरण समझ में नहीं आता है। या तो [email protected]_NEW या ऐसा नहीं है, शेष बयान अपरिवर्तनीय है, जब तक कि आप OR का उपयोग न करें। शायद आप व्यस्तता तर्क की व्याख्या कर सकते हैं?

-1

एक और उदाहरण 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)