2010-09-09 8 views
-1

Je dois créer une association entre deux produits, qui a des ID_produits uniques et les insérer dans une table déjà construite. L'association est créée en fonction du numéro de pièce unique de ces ID de produit. Par exemple:Création d'une association entre deux ID de produit

 
Product_id = 7578711 
Part Number = 0101-2478 

Product Id = 7957948 
Part Number = 0101-2478 

Product Id = 10558140 
Part Number = 0101-2478 

et ma table actuelle a les colonnes suivantes:

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

où les données sont sous forme de:

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

j'ai une requête qui a la capacité de roll Product_id au niveau du numéro de pièce, puis une requête pour faire passer le numéro de pièce au niveau product_id.

Sur la base des données ci-dessus, où ils ont même numéro de pièce, je veux créer une association et de générer des instructions d'insertion qui ajoutera 2 enregistrements sous forme de:

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 

Il va être beaucoup ID de produit dans cette table. Ce qui précède est juste un exemple:

J'ai 2 expressions de table communes: 1 roule l'ID de produit au niveau de numéro de pièce, et un autre annule le numéro de pièce à plusieurs ID de produit. J'essaie d'éviter un curseur.

Quelqu'un peut-il m'aider avec ce problème?

Mes 2 CTEs comme suit: comme

;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

Et le problème est ... –

+0

Donc, vous voulez lier des produits via GUID, n'est-ce pas? –

+0

Vous n'avez vraiment pas besoin d'utiliser 'with (nolock)' sur les CTE. –

Répondre

-1

essayer cette Sql. il devrait vous donner une liste complète de toutes les associations entre deux produits qui utilisent tous deux le même numéro de pièce ... Est-ce que c'est ce que vous voulez?

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 
Questions connexes