【问题标题】:The column 'ID' was specified multiple times for 'PivotTable'为“数据透视表”多次指定了“ID”列
【发布时间】:2018-01-22 04:34:28
【问题描述】:
SELECT PartyRelationshipID,[2] AS OrderGroup,[3] AS TaxStatus,[4] AS Area
FROM (
SELECT prs.PartyRelationshipID
,prs.PartyRelationshipSettingTypeID
,Value = CONVERT(INT, CASE WHEN IsNumeric(CONVERT(VARCHAR(12), prs.Value)) = 1 then CONVERT(VARCHAR(12), prs.Value) else 0 End)  
FROM [Party].PartyRelationshipSetting prs) AS SourceTable
INNER JOIN Party.PartyRelationship prship ON SourceTable.PartyRelationshipID = prship.ID
INNER JOIN Party.PartyRole pr ON prship.ToPartyRoleID = pr.ID
INNER JOIN Party.Organization org ON pr.PartyID = org.PartyID
PIVOT
(
SUM(Value)
FOR PartyRelationshipSettingTypeID IN ([2],[3],[4])
)AS PivotTable

我得到了

为“数据透视表”多次指定了“ID”列

但在上述查询中,我没有使用 SELECT * 语句,或者我为每个 ID 选择添加别名以避免冲突。这个错误发生在哪一部分,如何解决?

当我在代码中添加以下行时出现此错误。

INNER JOIN Party.PartyRole pr ON prship.ToPartyRoleID = pr.ID
INNER JOIN Party.Organization org ON pr.PartyID = org.PartyID

还有在哪里提取 WHERE 子句以便仅选择基于 prship.ToPartyRoleID 的条目。 WHERE 子句不适合 PIVOT 内部或外部。

【问题讨论】:

    标签: sql-server pivot inner-join


    【解决方案1】:

    由于不止一个表有ID 列,因此您不能使用该语法进行数据透视,请在子选择中选择所需的列并进行数据透视

    SELECT PartyRelationshipID,
           [2] AS OrderGroup,
           [3] AS TaxStatus,
           [4] AS Area
    FROM   (SELECT PartyRelationshipID, Value, PartyRelationshipSettingTypeID --its important to select only the required columns
            FROM   (SELECT prs.PartyRelationshipID,
                           prs.PartyRelationshipSettingTypeID,
                           Value = CONVERT(INT, CASE
                                                  WHEN Isnumeric(CONVERT(VARCHAR(12), prs.Value)) = 1 THEN CONVERT(VARCHAR(12), prs.Value)
                                                  ELSE 0
                                                END)
                    FROM   [Party].PartyRelationshipSetting prs) AS SourceTable
                   INNER JOIN Party.PartyRelationship prship
                           ON SourceTable.PartyRelationshipID = prship.ID
                   INNER JOIN Party.PartyRole pr
                           ON prship.ToPartyRoleID = pr.ID
                   INNER JOIN Party.Organization org
                           ON pr.PartyID = org.PartyID)a 
    PIVOT(SUM(Value) FOR PartyRelationshipSettingTypeID IN ([2],[3],[4]))AS PivotTable
    

    【讨论】:

    • 这是什么a:在INNER JOIN Party.Organization org ON pr.PartyID = org.PartyID)a
    • @HarshaW - subselect的别名
    • 我收到The column 'ID' was specified multiple times for 'a'.' and “数据透视表”的“ID”列被多次指定。`@tarheel 的回答给了我结果
    • @HarshaW - 我的错......现在检查
    【解决方案2】:

    我相信您只需将) as SourceTable 移到整个from 子句之后。这当然意味着第一个inner join也得改成...ON prs.PartyRelationshipID = prship.ID

    SELECT PartyRelationshipID
    ,[2] AS OrderGroup
    ,[3] AS TaxStatus
    ,[4] AS Area
    FROM (
        SELECT prs.PartyRelationshipID
        , prs.PartyRelationshipSettingTypeID
        , Value = CONVERT(INT, CASE WHEN IsNumeric(CONVERT(VARCHAR(12), prs.Value)) = 1 then CONVERT(VARCHAR(12), prs.Value) else 0 End)  
        FROM [Party].PartyRelationshipSetting prs
        INNER JOIN Party.PartyRelationship prship ON prs.PartyRelationshipID = prship.ID
        INNER JOIN Party.PartyRole pr ON prship.ToPartyRoleID = pr.ID
        INNER JOIN Party.Organization org ON pr.PartyID = org.PartyID
        ) AS SourceTable
    PIVOT
    (
    SUM(Value)
    FOR PartyRelationshipSettingTypeID IN ([2],[3],[4])
    )AS PivotTable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-13
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2017-10-25
      • 2015-09-07
      • 2017-03-13
      相关资源
      最近更新 更多