使用SQL Server 2008 R2:我无法绕过更新我从WITH
语句获得结果的临时表。使用WITH语句更新临时表结果
临时表,这将是我的主表,我们称之为#main
,很简单,看起来像这样的第一行(将有数百个产品代码,所以我不能硬编码产品在解决方案代码):
Product | GapForGoodsinWH1 | GapForGoodsinWH2
1000 | NULL | NULL
中的空白在那里我跑我的WITH
语句之前。 WITH
声明的目的是确定货物未被接收到某个仓库中的最长时间(在本示例中表示为WH1和WH2)
我的WITH
声明正常工作如果我身份验证产品代码和仓库:
WITH GoodsIn AS (
SELECT
Product,
ROW_NUMBER() OVER (ORDER BY GoodsInDate DESC) AS RN,
GoodsInDate
FROM GoodsIn
WHERE
GoodsInDate >= @StartDate
and GoodsInDate <= @EndDate
--
AND Product = 1000
AND Warehouse = 'WH1'
)
SELECT
A.Product,
MAX(DATEDIFF(DD, A.GoodsInDate, B.GoodsInDate)) AS TimeMissing
FROM
GoodsIn A
LEFT JOIN
GoodsIn B ON A.RN = B.RN + 1
GROUP BY
A.Product
HAVING
MAX(DATEDIFF(DD, A.GoodsInDate, B.GoodsInDate)) >= @Missing
所以日期参数看在一定时期内和@Missing
参数是为用户列出的产品,如果他们已经失踪的时间X时间(在参数定义)。
我想要做的就是e通过在Product
上进行更新,将TimeMissing
值输入到我的#main
表中。在这个例子中,我想通过将产品与#main.product
和Warehouse
到#main.GapForGoodsinWH1
进行匹配来更新#main.GapForGoodsinWH1
。
任何想法都会受到欢迎,提前谢谢。
您能提供GoodsIn表的结构吗?表中的同一产品可以有多个记录? – Kai
Hello Kai - 是的,可以。您将拥有“产品”,“仓库”和“GoodsInDate”。也会有数量,但我并不真正对此感兴趣,这是'GoodsInDate'之间的差距分析,只要在创建日期时有一定的数量。例如,产品1000可以在八月份出现多次,该产品有一个条目,并且该表格将包含WH1和WH2的条目。您可以在同一天进行两次交付,但这并不会影响我,因为他们只会在我的CTE中返回0。 – TJB
您是否可以在GapForGoodsinWH1列中清除您想要的值? – Kai