2010-09-09 45 views
-1

我必須在兩個產品之間創建關聯,這兩個產品具有唯一的product_ids並將它們插入到已構建的表中。該關聯基於這些產品id具有的唯一部件號創建。例如:在兩個產品ID之間創建關聯

 
Product_id = 7578711 
Part Number = 0101-2478 

Product Id = 7957948 
Part Number = 0101-2478 

Product Id = 10558140 
Part Number = 0101-2478 

和我目前的表有以下幾列:

ID (int) identity (1, 1) 
product_id 
date 
guid 

,其中數據是在形式:

1, 7578711, 12345, 2010-08-24 04:29:04.000,00286AFB-3880-4085-BAA0-DBCC0D59A391 

我有一個有能力的查詢將Product_id滾動到零件編號級別,然後查詢將零件編號滾動到product_id級別。

基於以上數據,他們有相同的部件號,我想創建一個協會,併產生插入語句將在表單中添加2條記錄:

2, 7957948, 12345, 2010-08-24 04:29:04.000,00286AFB-3880-4085-BAA0-DBCC0D59A391 
3, 10558140, 12345, 2010-08-24 04:29:04.000,00286AFB-3880-4085-BAA0-DBCC0D59A391 

有將是許多該表中的產品ID。以上只是一個例子:

我有2個公用表表達式:1將產品Id滾動到零件級別,另一個將零件號碼回滾到多個產品ID。我試圖避免遊標。

任何人都可以幫我解決這個問題嗎?

我2個熱膨脹係數爲如下:

;WITH cte (product_id, item_number) 
AS 
(

SELECT DISTINCT --TOP 1000 
     pds.product_id 
    --,pd.productOwner_id 
    , i.item_number 
FROM SurfwatcherEndeavorStats.dbo.productDetailBySite pds WITH (NOLOCK) 
     INNER JOIN ProductData.dbo.productDimensions pd with (NOLOCK) ON pds.product_id = pd.product_id 
     INNER JOIN ProductData.dbo.options o with (NOLOCK) ON pds.product_id = o.product_id 
     INNER JOIN ProductData.dbo.items i with (NOLOCK) ON o.option_id = i.item_id 
WHERE pds.productDetail_date > DATEADD(yyyy, -1, GETDATE()) 
     AND i.item_number IS NOT NULL 
    --AND i.item_number = '0101-3258' 
) 
SELECT TOP 1 item_number 
FROM cte WITH (NOLOCK) 
WHERE product_id = 7957948 


;WITH cte1 (product_id, item_number) 
AS 
(

SELECT DISTINCT --TOP 1000 
     pds.product_id 
    --,pd.productOwner_id 
    , i.item_number 
FROM SurfwatcherEndeavorStats.dbo.productDetailBySite pds WITH (NOLOCK) 
     INNER JOIN ProductData.dbo.productDimensions pd with (NOLOCK) ON pds.product_id = pd.product_id 
     INNER JOIN ProductData.dbo.options o with (NOLOCK) ON pds.product_id = o.product_id 
     INNER JOIN ProductData.dbo.items i with (NOLOCK) ON o.option_id = i.item_id 
WHERE pds.productDetail_date > DATEADD(yyyy, -1, GETDATE()) 
     AND i.item_number IS NOT NULL 
) 
SELECT product_id 
FROM cte1 WITH (NOLOCK) 
WHERE item_number = '0101-2478' 
+1

而問題是...... – 2010-09-09 19:36:55

+0

所以你想通過GUID綁定產品,是嗎? – 2010-09-09 19:42:04

+0

你真的不需要在CTE上使用'(nolock)'。 – 2010-09-09 19:43:43

回答

-1

試試這個SQL語句。它應該給你一個兩個產品之間的所有關聯的完整列表,這兩個產品都使用相同的零件號......是你想要的嗎?

Select Distinct A.Product_Id, B.Product_ID 
    From YourTable A 
     Join YourTable B 
     On B.PartNumber = A.PartNumber 
      And B.Product_Id > A.Product_Id 
相關問題