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 中没有的主要内容,如果未能解决你的问题,请参考以下文章
将 excel、openoffice 和 ms office 2007 数据导入到 rails 中的 db
MS Excel 2007:如何在每次打印输出后增加单元格中的数字
在 MS Access 2007 中对 ODBC 表导入 sql 查询