2010-12-11 25 views
0

Possible Duplicate:
WHERE Something IN (CASE WHEN statement) ??!!O Som quelque chose dans (déclaration CASE WHEN)?

Je veux écrire une "sélection-où" avec une condition cinditonal.
i utilisé "cas où" dans "où ID IN" clause Mais je l'erreur suivante:

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. 

ici est mon code simplifié:

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 

S'il vous plaît Look At "WHERE UnitsAllocationDetails.ExpenseID IN ... "
Comment puis-je résoudre ce problème?

+0

Vous venez de poser la même question. Si vous voulez modifier votre question, éditez-la, n'en créez pas une nouvelle. –

+1

malheureusement dans ma région "XXX" est interdit pharase! et a été filtré conformément à nos politiques Internet. donc je ne peux pas ouvrir ma question pour voir ou modifier, alors je l'ai encore demandé. vous avez répété XXX à nouveau sur cette page! – mahdiahmadirad

+0

rotfl. J'ai édité votre question originale pour enlever les x. –

Répondre

0

Au lieu de

OÙ EN UnitsAllocationDetails.ExpenseID (CAS 1 QUAND 1 ALORS (SELECT Id DE bdg_Expenses OU ParentId = 1) AUTRE (SELECT Id bdg_Expenses DE WHERE Id = 1) FIN) utiliser la suivant

OÙ UnitsAllocationDetails.ExpenseID IN (SELECT Id à partir de bdg_Expenses OÙ ParentId = 1 et 1 = 1 UNION ALL SELECT Id à partir de bdg_Expenses où id = 1 et 1 <> 1 )

+0

très utile – mahdiahmadirad