2016-08-23 2 views

Répondre

0

UPDATE sur PDW est un peu étrange et a quelques limites que vous avez trouvé. Fondamentalement, vous devez d'abord faire un CTAS. Ensuite, vous pouvez soit vous joindre à la table CTAS lors de la mise à jour ou simplement renommer l'ancienne table et la remplacer par la nouvelle table CTAS via le renommage. Voici un exemple de CTAS puis se joindre au cours MISE À JOUR:

CREATE TABLE CTAS_ACS 
WITH (DISTRIBUTION = REPLICATE) 
AS 
SELECT 
ISNULL(CAST([EnglishProductCategoryName] AS NVARCHAR(50)),0) AS [EnglishProductCategoryName] 
,ISNULL(CAST([CalendarYear] AS SMALLINT),0) AS [CalendarYear] 
,ISNULL(CAST(SUM([SalesAmount]) AS MONEY),0) AS [TotalSalesAmount] 
FROM dbo.factInternetSales s 
JOIN dbo.DimDate d    ON s.OrderDateKey   = d.DateKey 
JOIN dbo.DimProduct p   ON s.ProductKey    = p.ProductKey 
JOIN dbo.DimProductSubCategory u ON p.[ProductSubcategoryKey] = u.[ProductSubcategoryKey] 
JOIN dbo.DimProductCategory c ON u.[ProductCategoryKey] = c.[ProductCategoryKey] 
WHERE [CalendarYear] = 2004 
GROUP BY [EnglishProductCategoryName] 
,  [CalendarYear]; 

UPDATE AnnualCategorySales 
SET AnnualCategorySales.TotalSalesAmount = CTAS_ACS.TotalSalesAmount 
FROM CTAS_ACS 
WHERE CTAS_ACS.[EnglishProductCategoryName] = AnnualCategorySales.[EnglishProductCategoryName] 
AND CTAS_ACS.[CalendarYear]    = AnnualCategorySales.[CalendarYear]; 

Alors que le schéma ci-dessus est celle typique, dans votre cas, je pense que ce qui suit fonctionnerait (du haut de ma tête):

Update TableA 
Set EnableFlag='Y' 
WHERE ID IN (
SELECT B.ID 
FROM TableB B 
INNER JOIN TableC C ON B.ID=C.ID 
) 
+0

Merci Greg .... – Abhi