2010-12-11 119 views
0

Possible Duplicate:
WHERE Something IN (CASE WHEN statement) ??!!哪里有东西(CASE WHEN语句)?

我想ro写一个“select-where”cindase with cinditonal condition。
我所用 “的情况下,当” 中 “其中ID IN” 的条款,但我有以下错误:

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

你刚刚问了同样的问题。如果你想改变你的问题,编辑它,不要创建一个新的问题。 – 2010-12-11 09:01:04

+1

不幸在我的地区“XXX”是forbiden pharase!并根据我们的互联网政策进行过滤。所以我无法打开我的问题查看或编辑,然后我再次问。你在本页再次重复XXX! – mahdiahmadirad 2010-12-11 09:15:36

+0

rotfl。我编辑了您的原始问题以删除x。 – 2010-12-11 09:21:40

回答

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) END) 使用以下

WHERE UnitsAllocationDetails.ExpenseID IN(SELECT ID FROM bdg_Expenses WHERE的ParentId = 1和l = 1 UNION ALL SELECT ID FROM bdg_Expenses其中id = 1和1 <> 1 )

+0

非常有用的方法 – mahdiahmadirad 2010-12-11 09:56:40