2016-08-23 11 views

답변

0

UPDATE (PDW의 경우) 약간 이상하며 발견 한대로 일부 제한이 있습니다. 기본적으로 CTAS를 먼저 수행해야합니다. 그런 다음 UPDATE 중에 CTAS 테이블에 조인하거나 이전 테이블의 이름을 바꾸고 이름 바꾸기를 통해 새 CTAS 테이블로 바꿀 수 있습니다. 여기에 CTAS의 예는 다음 업데이트시에 가입입니다 :

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]; 

위의 패턴이 일반적인 일이지만, 귀하의 경우에는 내가 다음은 (내 머리 위로 떨어져) 일 것이라고 생각 :

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

그레그에게 감사드립니다 .... – Abhi