2017-02-21 2 views
0

Je suis extrêmement novice en SQL mais je l'apprécie vraiment et je veux m'améliorer.SQL - If Statement Inside DateAdd

Dans mon code, je prends 3 tables et les fusionne ensemble puis crée quelques colonnes pour cette fusion. J'ai créé une colonne "DaysOfStock" et je veux ajouter le nombre dans chaque colonne à la date actuelle. Le problème est le "DaysOfStock" est une fonction "si" et je ne sais pas comment l'ajouter dans la fonction "DayAdd". La section de mon code que j'ai des problèmes w/est ci-dessous.

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) 

Veuillez me faire savoir si quelque chose n'est pas clair. Merci pour votre aide à l'avance. -alex

Répondre

0

Eh bien, trivialement, tout en répétant le même code:

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)