我希望ro写一个“选择地点”的cluase与cinditonal条件
我在“where ID IN”子句中使用了“case-when”但是我有以下错误:
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
这是我的简化代码:
SELECT
UnitsAllocation.UnitID,
OrganizationUnits.Title AS UnitTitle,
'Title' AS ExpenseTitle1,
SUM(UnitsAllocationDetails1.ExpenseAmount1) AS ExpenseAmount1
FROM
[bdg_UnitsAllocation] UnitsAllocation LEFT OUTER JOIN
(SELECT
UnitsAllocationDetails.UnitsAllocationID,
SUM(UnitsAllocationDetails.Amount) / 1 AS ExpenseAmount1
FROM [bdg_UnitsAllocationDetails] UnitsAllocationDetails
WHERE UnitsAllocationDetails.ExpenseID IN (CASE 1
WHEN 1 THEN (SELECT Id FROM bdg_Expenses WHERE ParentId = 1)
ELSE (SELECT Id FROM bdg_Expenses WHERE Id = 1)
END)
GROUP BY UnitsAllocationDetails.UnitsAllocationID) UnitsAllocationDetails1 ON UnitsAllocationDetails1.UnitsAllocationID = UnitsAllocation.ID LEFT OUTER JOIN
[bdg_OrganizationUnits] OrganizationUnits ON UnitsAllocation.UnitID = OrganizationUnits.ID
GROUP BY UnitsAllocation.UnitID, OrganizationUnits.Title
请看“WHERE UnitsAllocationDetails.ExpenseID IN ...
”
我该如何解决这个问题?
答案 0 :(得分:0)
而不是
WHERE UnitsAllocationDetails.ExpenseID IN(CASE 1 WHEN 1 THEN(SELECT Id from bdg_Expenses WHERE ParentId = 1) ELSE(SELECT Id FROM bdg_Expenses WHERE Id = 1) 结束) 使用以下
WHERE UnitsAllocationDetails.ExpenseID IN(SELECT Id FROM bdg_Expenses WHERE ParentId = 1 and 1 = 1 UNION ALL SELECT Id from bdg_Expenses WHERE Id = 1和1&lt;&gt; 1 )