Создание ассоциации между двумя идентификаторами продуктов - PullRequest
0 голосов
/ 09 сентября 2010

Мне нужно создать связь между двумя продуктами, которые имеют уникальные product_ids, и вставить их в уже созданную таблицу.Ассоциация создается на основе уникального номера детали, который имеют эти идентификаторы продукта.Например:

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

В этой таблице будет много идентификаторов продуктов.Выше приведен только пример:

У меня есть 2 общих табличных выражения: 1 переводит идентификатор продукта на уровень номера детали, а другой возвращает номер детали к нескольким идентификаторам продукта.Я пытаюсь избежать курсора.

Может ли кто-нибудь здесь помочь мне с этой проблемой?

Мои 2 CTE следующим образом:

;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 Ответ

0 голосов
/ 09 сентября 2010

попробуйте это 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...