Мне нужно создать связь между двумя продуктами, которые имеют уникальные 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'