使用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