TSQL Msg 1013“使用相关名称来区分它们。”

TSQL Msg 1013“使用相关名称来区分它们。”,tsql,sql-server-2008,Tsql,Sql Server 2008,在过去的两个小时里,我仔细研究了很多建议,不知道如何解决这个问题 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 Person

在过去的两个小时里,我仔细研究了很多建议,不知道如何解决这个问题

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]  
然后我得到这个错误:

Msg 1013,16级,状态1,第6行,对象个人组和 FROM子句中的Personals.group具有相同的公开名称。使用 关联名称以区分它们

谢谢。

您在第一个子查询中使用了两次Personals.Groups表。 如果您真的想要表Personals.Groups,您需要给它们一个别名,然后在查询的其余部分中使用该别名,而不是表名

INNER JOIN Personals.Groups as PG1

如果您只需要一个,您可以将on子句组合起来,只使用一个

INNER JOIN Personals.Groups 
  ON Personals.Registry.[Group] = Personals.Groups.Id and
     Personals.Groups.Id = CHG.GroupID
INNER JOIN Personals.Groups 
  ON Personals.Registry.[Group] = Personals.Groups.Id and
     Personals.Groups.Id = CHG.GroupID