2010-09-09 77 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 
相关问题