Excel 2007 MS Query 中的多部分标识符错误,但 SQL Server 2008 中没有

Posted

技术标签:

【中文标题】Excel 2007 MS Query 中的多部分标识符错误,但 SQL Server 2008 中没有【英文标题】:Multipart identifier error in Excel 2007 MS Query but not in SQL Server 2008 【发布时间】:2013-05-23 19:41:58 【问题描述】:

我有以下SQL代码

SELECT pd1.Meter,
       pd1.BasicPool,
       pd1.RateClass,
       pd1.Flowdate,
       (SELECT upOrDownContract
        FROM   PipelineData pd
        WHERE  pd.id = pd1.sibling) AS DnK,
       match.Volume,
       (SELECT Name
        FROM   Pipeline P
        WHERE  P.id = ISNULL(pd2.pipelineID, t.PipelineId)) AS Pipeline,
       (SELECT Name
        FROM   Client C
        WHERE  C.id = t.ClientId)                           AS CounterParty
FROM   MatchingHistoryBothSides match
       LEFT JOIN PipelineData pd1
              ON match.type1 = 'PipelineDataVO'
                 AND match.id1 = pd1.ID
       LEFT JOIN PipelineData pd2
              ON match.type2 = 'PipelineDataVO'
                 AND match.id2 = pd2.ID
       LEFT JOIN TransactionDailyVolume dtv
              ON match.type2 = 'TransactionDailyVolumeVO'
                 AND match.id2 = dtv.ID
       LEFT JOIN [Transaction] t
              ON dtv.TransactionID = t.ID
WHERE  match.type1 = 'PipelineDataVO'
       AND ( match.type2 = 'PipelineDataVO'
              OR match.type2 = 'TransactionDailyVolumeVO' )
       AND pd1.flowDate BETWEEN ? AND ?
       AND pd1.LDCid = 75
       AND pd1.direction = 'Receipt' 

它在 SQL Sever 2008 中运行良好,但在 Excel 2007 的 MS Query 中给出 [Microsoft][ODBC SQL Server Driver][SQL Server]The multi-part identifier "pd1.flowDate" could not be bound。谁能解释这段代码哪里出错了?

【问题讨论】:

在 Excel 中尝试select top 1 Flowdate from PipelineData。能否请您也将错误消息发布在 ful 中。 @Stoleg 我发布了完整的错误消息,建议我在上面的代码中在哪里添加Top 1 运行我的代码而不是你的。它将显示该列是否存在/是否可见。 @pnuts 也建议区分大小写。 @Stoleg 我在 excel 中运行了你的代码,它工作了 我找到了这个Microsoft Support Article。我认为这里也是同样的情况。你们俩怎么看? 【参考方案1】:

Select 中的子查询不允许在 MS Query 中使用。因此,删除子查询并将它们作为连接将在 MS Query 中工作。以下代码适用于 MS Query

SELECT pd1.Meter,
       pd1.BasicPool,
       pd1.RateClass,
       pd1.FlowDate,
       pd.upOrDownContract AS dnk,
       match.Volume,
       p.Name              AS pipeline,
       c.Name              AS counterparty
FROM   Matchinghistorybothsides match
       LEFT JOIN Pipelinedata pd1
              ON match.type1 = 'PipelineDataVO'
                 AND match.id1 = pd1.ID
       LEFT JOIN Pipelinedata pd2
              ON match.type2 = 'PipelineDataVO'
                 AND match.id2 = pd2.ID
       LEFT JOIN Transactiondailyvolume dtv
              ON match.type2 = 'TransactionDailyVolumeVO'
                 AND match.id2 = dtv.ID
       LEFT JOIN [Transaction] t
              ON dtv.TransactionID = t.ID
       LEFT JOIN Client c
              ON c.id = t.ClientId
       LEFT JOIN Pipelinedata pd
              ON pd.id = pd1.sibling
       LEFT JOIN Pipeline p
              ON p.id = COALESCE(pd2.PipelineId, t.PipelineId)
WHERE  match.type1 = 'PipelineDataVO'
       AND ( match.type2 = 'PipelineDataVO'
              OR match.type2 = 'TransactionDailyVolumeVO' )
       AND pd1.FlowDate BETWEEN ? AND ?
       AND pd1.LDCid = 75
       AND pd1.direction = 'Receipt'

【讨论】:

以上是关于Excel 2007 MS Query 中的多部分标识符错误,但 SQL Server 2008 中没有的主要内容,如果未能解决你的问题,请参考以下文章

通过双击突出显示 MS excel 2007 中的单元格

将 excel、openoffice 和 ms office 2007 数据导入到 rails 中的 db

MS Excel 2007:如何在每次打印输出后增加单元格中的数字

在 MS Access 2007 中对 ODBC 表导入 sql 查询

MS Access 2007 在查询中旋转数据并从 Excel 调用

Excel - Microsoft Query 的页外引用