我想要更新我的表中的每一行的值,上面的值取决于一些值。
假设我的表是这样的:
|storeID| Date | Stock | Medition | Regularized |
--------------------------------
| 1 |2019-01-01| 500 | 550 | 1 |
| 1 |2019-01-02| 500 | 0 | 0 |
| 1 |2019-01-03| 500 | 0 | 0 |
| 2 |2019-01-01| 250 | 300 | 1 |
| 2 |2019-01-02| 250 | 350 | 0 |
| 2 |2019-01-03| 250 | 0 | 0 |输出必须如下所示:
|storeID| Date | Stock | Medition | Regularized |
--------------------------------
| 1 |2019-01-01| 500 | 550 | 1 |
| 1 |2019-01-02| 550 | 0 | 0 |
| 1 |2019-01-03| 550 | 0 | 0 |
| 2 |2019-01-01| 250 | 300 | 1 |
| 2 |2019-01-02| 300 | 350 | 0 |
| 2 |2019-01-03| 300 | 0 | 0 |当一个商店已经被正规化时,它的库存必须是第二天的中介量。
有时已经做了调解,但股票不需要正规化。我尝试了一些关于递归表的东西,并阅读了一些类似问题的帖子(Update record with previous row),但我仍然无法解决我的问题。
想象一下,我有一个装满燃料的油箱。每天我都有销售和投入,坦克的库存也在变化。任何一天,我都可以做一个中介来检查真正的股票(中介)是否与我在“book”(股票)中写的股票匹配,如果它不同,我检查为最后一列(正规化),第二天的股票将是我前一天做的中介。如果我检查最后一列为0,即使我做了中介,股票也会和前一天一样。
感谢你能为我提供的一切帮助。
发布于 2019-06-20 23:55:39
您可以使用CROSS APPLY将表连接到自身。
UPDATE st SET
stock = u.Medition
FROM SomeTable st
CROSS APPLY( SELECT TOP 1 Medition
FROM SomeTable i
WHERE i.storeID = st.storeID
AND i.[Date] <= st.[Date]
AND i.Regularized = 1
ORDER BY [Date] DESC) u
WHERE st.Regularized = 0;发布于 2019-06-21 02:15:21
假设每个storeid只有一个正则化行
UPDATE INPUT_TABLE IT
SET STOCK = ( SELECT MEDICATION FROM INPUT_TABLE ITI WHERE IT.STOREID = ITI.STOREID AND ITI.Regularized =1 )
WHERE IT.Regularized =0希望这能有所帮助
https://stackoverflow.com/questions/56689588
复制相似问题