SQL动态库存移动报告

SQL动态库存移动报告,sql,sql-server-2008-r2,sql-view,Sql,Sql Server 2008 R2,Sql View,我已设法从数据库中获取数据,如下所示: STOCKNAME | STORENAME | WEEKNUM | SOH | SALES Apples | Store 1 | 10 | 1 | 3 Apples | Store 1 | 9 | 4 | 1 Apples | Store 1 | 8 | 5 | Pears | Store 1 | 10 | 15 |

我已设法从数据库中获取数据,如下所示:

STOCKNAME | STORENAME | WEEKNUM  | SOH   | SALES
Apples    | Store 1   | 10       |   1   |  3
Apples    | Store 1   |  9       |   4   |  1
Apples    | Store 1   |  8       |   5   |  
Pears     | Store 1   | 10       |  15   |  0
Pears     | Store 1   |  9       |  15   |  0
Pears     | Store 1   |  8       |  15   |  
Mangoes   | Store 1   | 10       |  33   | 15 <-- They could have received more stock between week week
Mangoes   | Store 1   |  9       |  25   |  8
Mangoes   | Store 1   |  8       |  32   |     
  • 对数据运行另一个查询,并通过MAX Weeknumber SOH图。添加一个别名为TransactionType的附加静态列,其值为“Current SOH”

    SELECT STOCKNAME, STORENAME, SOH, 0 AS QTY, 'SOH' AS TRANSACTIONTYPE 
    FROM TABLE1
    GROUP BY STOCKNAME, STORENAME,'SOH' AS TRANSACTIONTYPE
    HAVING WEEKNUMBER = 10        <-- Not sure how to dynamic this. Weeknumber will change
    
  • 然后在这些结果中搜索

    CASE WHEN (QTY = 0 and SOH > 0) THEN 'Attention Required Here' ELSE 'Everything is Cool' END
    

  • 您能否添加预期结果(根据您的样本数据)?此外,还使用了标记dbms产品-答案可能取决于它。请特别查看窗口函数和LAG()。使用windows函数,您应该能够在一条语句中进行计算。
    SELECT STOCKNAME, STORENAME, SOH, 0 AS QTY, 'SOH' AS TRANSACTIONTYPE 
    FROM TABLE1
    GROUP BY STOCKNAME, STORENAME,'SOH' AS TRANSACTIONTYPE
    HAVING WEEKNUMBER = 10        <-- Not sure how to dynamic this. Weeknumber will change
    
    SELECT * FROM QUERY1
    UNION
    SELECT * FROM QUERY2
    
    CASE WHEN (QTY = 0 and SOH > 0) THEN 'Attention Required Here' ELSE 'Everything is Cool' END