2013-06-24 4 views
-1

Вот некоторые SQL, которая работает нормально внутри и SP (SQL Server 2000)случай использования состояние при вставке

Insert into #sysAccrual 
Select 'R', Cast(S.ServicePurchaseLineID as varchar), 
    - S.Amount, dateadd(mm, 1, S.Date), null, L.LicenceTypeID, null, 
    L.LicenceID, L.LicenceNumber 
from sysMYOB_SP S inner join Licence L ON S.LicenceID = L.LicenceID 
     and S.PaymentReasonID = 2 
     and S.Accrued = 0 
     and S.Deducted = 1 
     and datediff(yy, S.Date, @AccrualMonth) = 0 
     and datediff(mm, S.Date, @AccrualMonth) = 0 

Я хотел бы поместить состояние вокруг этой части «DATEADD (мм, 1, S. Дата)»Если е в состоянии сделать это:

Insert into #sysAccrual 
Select 'R', Cast(S.ServicePurchaseLineID as varchar), - S.Amount, 
     case when 
     dateDiff(d, S.Date , LCS.statusDateTo) > 31 THEN 
    dateadd(mm, 1, S.Date), 
    ELSE 
     S.Date, 
    END 
     null, L.LicenceTypeID, null, 
     L.LicenceID, L.LicenceNumber 
from sysMYOB_SP S inner join Licence L ON S.LicenceID = L.LicenceID 
       inner join licCurrentStatus LCS ON L.LicenceID = LCS.LicenceID 
     and S.PaymentReasonID = 2 
     and S.Accrued = 0 
     and S.Deducted = 1 
     and datediff(yy, S.Date, @AccrualMonth) = 0 
     and datediff(mm, S.Date, @AccrualMonth) = 0 

@ghost моих вопросов я могу сделать эту часть второго запроса:

case when 
dateDiff(d, S.Date , LCS.statusDateTo) > 31 THEN 
    dateadd(mm, 1, S.Date), 
ELSE 
    S.Date, 
END 

Я являюсь ип убедитесь, что в случае, если я использую этот случай, внутри вставки, как я сделал.

+4

Каков ваш вопрос? – Ghost

+1

Вы забыли запятую после 'END', если это ваш фактический код – LittleBobbyTables

+1

И удалите запятые в' THEN' и 'ELSE' после' dateadd (mm, 1, S.Date) 'и' S.Date' соответственно – peterm

ответ

0

Запятые для Вашего случая заявления были неверны

Вместо

case when 
    dateDiff(d, S.Date , LCS.statusDateTo) > 31 THEN 
dateadd(mm, 1, S.Date), 
ELSE 
    S.Date, 
END 

вы должны иметь

case when 
dateDiff(d, S.Date , LCS.statusDateTo) > 31 THEN 
dateadd(mm, 1, S.Date) 
ELSE 
S.Date 
END, 
+0

OK спасибо , Итак, после перемещения коммитеров я должен использовать этот случай внутри INSERT, как это? – Mat41