2013-05-23 1 views
1

나는이 다음 SQL 코드여러 부분 식별자 Excel 2007의 MS 쿼리에서 오류가 아니라 SQL 서버 2008

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 끊다 2008 년에 잘 작동하지만, 사람이 설명 할 수 엑셀 2007의 MS 쿼리에 [Microsoft][ODBC SQL Server Driver][SQL Server]The multi-part identifier "pd1.flowDate" could not be bound을 제공합니다 이 코드는 어디에서 잘못 되었습니까?

+0

Excel에서 PipelineData에서''Select top 1 Flowdate '을 시도하십시오. ful에 오류 메시지를 게시 할 수도 있습니까? – Stoleg

+0

대소 문자를 구분합니까? – pnuts

+0

@Stoleg 전체 오류 메시지를 게시했으며 위의 코드에'Top 1'을 추가 할 것을 제안합니까? – Ram

답변

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'