SQL - DateAdd 中的 If 语句

SQL - If Statement Inside DateAdd

我对 SQL 非常陌生,但我真的很喜欢它并且想做得更好。

在我的代码中,我将 3 个表合并在一起,然后为该合并创建几列。我创建了一个列 "DaysOfStock" 并想将每列中的数字添加到当前日期。问题是 "DaysOfStock" 是一个 "if" 函数,我不确定如何将它添加到 "DayAdd" 函数中。下面是我遇到问题的代码部分。

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)

如有不明之处请告诉我。 提前感谢您的帮助。 -亚历克斯

嗯,很简单,只需重复相同的代码:

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)