Как исправить общее табличное выражение -CTE и страна кода

#sql

#sql

Вопрос:

Я работаю с некоторой базой данных и пытаюсь выполнить CTE. Чтобы сделать это, я сначала начал с этого фрагмента кода, который работал очень хорошо

 SELECT 
fa.TenDigits,
co.EconomicGroup
FROM dbo.FactTable AS fa
INNER JOIN [DIMENSION].[HS] AS hs ON hs.TenDigits=fa.TenDigits
INNER JOIN [DIMENSION].[Countries] AS co ON co.CountryCodes=fa.CountryCodes
WHERE [Year]='2019'
GROUP BY fa.TenDigits,fa.CountryCodes,co.EconomicGroup
 

Вывод этого кода показан на рисунке ниже:

введите описание изображения здесь

Итак, следующим шагом должна быть сумма некоторых значений этой базы данных с CTE. Итак, с приведенным выше кодом я пытаюсь использовать CTE ниже, но что-то не так, и код работает плохо.

 ;WITH MyCTE as
(
SELECT 
fa.TenDigits,
co.CountryCodes,
co.EconomicGroup,
SUM(CustomsDuties_T) AS SumCustomsDuties,
ROW_NUMBER() OVER (Partition by CountryCodes ORDER BY SUM(CustomsDuties_T)DESC) AS RN
FROM dbo.FactTable AS fa
INNER JOIN [DIMENSION].[HS] AS hs ON hs.TenDigits=fa.TenDigits
INNER JOIN [DIMENSION].[Countries] AS co ON co.CountryCodes=fa.CountryCodes
WHERE [Year]='2019'
GROUP BY fa.TenDigits,fa.CountryCodes,co.EconomicGroup
)
SELECT *
FROM MyCTE
WHERE RN<21 
 

После выполнения этого кода я получил это сообщение об ошибке:

 Msg 8120, Level 16, State 1, Line 218
Column 'DIMENSION.Countries.CountryCodes' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Msg 209, Level 16, State 1, Line 221
Ambiguous column name 'CountryCodes'.
 

Итак, кто-нибудь может мне помочь, как исправить этот код?

Комментарии:

1. Вы группируете по fa.CountryCodes , но выбираете co.CountryCodes

2. Я пытаюсь изменить, но ничего

3. После изменения я получаю это сообщение «Сообщение 209, уровень 16, состояние 1, строка 221 Неоднозначное имя столбца «Коды стран»».

4. Это потому, что вы Partition by CountryCodes , но какой из них?

5. Да, это проблема. Спасибо!