我可以在SQL Server 2005的HAVING
子句中有一个case语句吗?
以下是我的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
谢谢,
阿米特
答案 0 :(得分:18)
示例(来自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;
答案 1 :(得分:3)
是的,这是有效的语法。但是,the text, image, and ntext data types cannot be used in a HAVING
clause。
更新:您更新的示例没有意义。 CLIENT.OH_PK=@CLIENTPK_NEW
或者OR
都没有,除非你使用{{1}},否则声明的其余部分是无关紧要的。也许你可以解释一下这种逻辑吗?
答案 2 :(得分:-1)
来自https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.CharField
的另一个例子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)