TSQL Msg 1013 «Используйте имена корреляций, чтобы различать их». - PullRequest
4 голосов
/ 16 октября 2011

Я просмотрел много предложений и не могу понять, как решить эту проблему за последние два часа.

SET DATEFORMAT DMY

DECLARE @Source DATETIME = '01/01/2001'
DECLARE @Destenaition DATETIME = '01/01/2020'

SELECT ST.[Group],
       ST.Shop,
       SUM(ST.Purchased) AS Total,
       CHG.Charged
FROM   (SELECT Personals.Groups.[Name]      AS 'Group',
               Cards.vPurchases.PersonalID,
               Personals.Registry.[Name],
               SUM(Cards.vPurchases.Ammont) AS Purchased,
               Cards.vPurchases.ShopName    AS Shop
        FROM   Cards.vPurchases
               INNER JOIN Personals.Registry
                 ON Personals.Registry.Id = Cards.vPurchases.PersonalID
               INNER JOIN Personals.Groups
                 ON Personals.Registry.[Group] = Personals.Groups.Id
               INNER JOIN Personals.Groups
                 ON Personals.Groups.Id = CHG.GroupID
        WHERE  Cards.vPurchases.[TimeStamp] >= @Source
               AND Cards.vPurchases.[TimeStamp] <= @Destenaition
        GROUP  BY Cards.vPurchases.PersonalID,
                  Personals.Registry.[Name],
                  Personals.Groups.[Name],
                  Cards.vPurchases.ShopName) ST,
       (SELECT PG.Id                      AS GroupID,
               SUM(Cards.vCharges.Amount) AS Charged
        FROM   Cards.vCharges
               INNER JOIN Personals.Registry
                 ON Personals.Registry.Id = Cards.vCharges.PersonalID
               INNER JOIN Personals.Groups AS PG
                 ON Personals.Registry.[Group] = PG.Id
        WHERE  Cards.vCharges.[TimeStamp] >= @Source
               AND Cards.vCharges.[TimeStamp] <= @Destenaition
        GROUP  BY Personals.Groups.[Name]) AS CHG
GROUP  BY ST.Shop,
          ST.[Group]  

И затем я получаю эту ошибку:

Msg1013, Уровень 16, Состояние 1, Строка 6 Объекты "Personals.Groups" и "Personals.Groups" в предложении FROM имеют одинаковые открытые имена.Используйте имена корреляций, чтобы различать их.

Спасибо.

1 Ответ

10 голосов
/ 16 октября 2011

Вы используете таблицу Personals.Groups два раза в первом подзапросе.Если вы действительно хотите иметь таблицу Personals.Groups, вам нужно дать им псевдоним, который вы затем используете вместо имен таблиц в остальной части запроса.

INNER JOIN Personals.Groups as PG1

и

INNER JOIN Personals.Groups as PG2

Если вам нужен только один, вы можете объединить предложения on, чтобы использовать только один.

INNER JOIN Personals.Groups 
  ON Personals.Registry.[Group] = Personals.Groups.Id and
     Personals.Groups.Id = CHG.GroupID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...