2017-02-21 8 views
0

저는 SQL에 매우 익숙하지만 실제로 그것을 즐기고 더 잘하고 싶습니다.SQL - If Statement Inside DateAdd

제 코드에서는 3 개의 테이블을 병합 한 다음 병합하여 병합을위한 몇 개의 열을 만듭니다. 열 "DaysOfStock"을 작성하고 각 열의 숫자를 현재 날짜에 추가하려고합니다. 문제는 "DaysOfStock"이 "if"함수이고 "DayAdd"함수에 추가하는 방법을 모르겠습니다. 내 코드 섹션에서 w/문제가 아래에 있습니다.

SELECT Cust.Article, 
    IsNull(stock.StockQuantity,0) StockQuantity, 
    IsNull(orders.OpenQty,0) OpenOrders, 
    IsNull(usage.[3MonUsage], 0) [3MonUsage], IsNull(usage.EAU, 0) [EAU], 
    ROUND(IsNull(usage.EAU, 0)/366,0) DailyUsage, 
    CASE WHEN IsNull(usage.EAU, 0)/366 = 0 THEN ROUND(IsNull(stock.StockQuantity,0)/(IsNull(orders.OpenQty, 0)/366),2) 
    ELSE ROUND(IsNull(stock.StockQuantity,0)/(IsNull(usage.EAU, 0)/366),2) END AS DaysOfStock 
    DateAdd(day, **DaysOfStock**, GetDate()) 
FROM TeslaArts 
     LEFT OUTER JOIN usage ON CustArts.Article = usage.Article 
     LEFT OUTER JOIN stock ON CustArts.Article = stock.Article 
     LEFT OUTER JOIN orders ON CustArts.Article = orders.Article 
WHERE (orders.OpenQty > 0 AND usage.[3MonUsage] > 0) 
    OR (orders.OpenQty = 0 AND usage.[3MonUsage] > 0) 
    OR (orders.OpenQty > 0 AND usage.[3MonUsage] = 0) 

불명확 한 점이 있으면 알려주십시오. 미리 도움을 주셔서 감사합니다. 알렉스

답변

0

음, 사소, 그냥 같은 코드를 반복하여 :

SELECT Cust.Article, 
    IsNull(stock.StockQuantity,0) StockQuantity, 
    IsNull(orders.OpenQty,0) OpenOrders, 
    IsNull(usage.[3MonUsage], 0) [3MonUsage], IsNull(usage.EAU, 0) [EAU], 
    ROUND(IsNull(usage.EAU, 0)/366,0) DailyUsage, 
    CASE WHEN IsNull(usage.EAU, 0)/366 = 0 THEN ROUND(IsNull(stock.StockQuantity,0)/(IsNull(orders.OpenQty, 0)/366),2) 
    ELSE ROUND(IsNull(stock.StockQuantity,0)/(IsNull(usage.EAU, 0)/366),2) END AS DaysOfStock, 
    DateAdd(day, 
      CASE WHEN IsNull(usage.EAU, 0)/366 = 0 THEN 
       ROUND(IsNull(stock.StockQuantity,0)/(IsNull(orders.OpenQty, 0)/366),2) 
      ELSE 
       ROUND(IsNull(stock.StockQuantity,0)/(IsNull(usage.EAU, 0)/366),2) 
      END, 
      GetDate()) AS ProjectedDate 
FROM TeslaArts 
     LEFT OUTER JOIN usage ON CustArts.Article = usage.Article 
     LEFT OUTER JOIN stock ON CustArts.Article = stock.Article 
     LEFT OUTER JOIN orders ON CustArts.Article = orders.Article 
WHERE (orders.OpenQty > 0 AND usage.[3MonUsage] > 0) 
    OR (orders.OpenQty = 0 AND usage.[3MonUsage] > 0) 
    OR (orders.OpenQty > 0 AND usage.[3MonUsage] = 0)