【问题标题】:SQL - If Statement Inside DateAddSQL - DateAdd 内的 If 语句
【发布时间】:2017-07-11 14:51:10
【问题描述】:

我对 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)

如果有什么不清楚的地方请告诉我。 提前感谢您的帮助。 -亚历克斯

【问题讨论】:

    标签: sql if-statement calculated-columns case-when dateadd


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 2016-11-10
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多