简体   繁体   English

MS访问SQL查询

[英]MS Access to SQL Query

I have few queries that have been migrated to SQL Server from Access DB. 我已经从Access DB迁移到SQL Server的查询很少。 The results however are not the same. 但是结果不一样。 Below are the queries in Access and SQL. 下面是Access和SQL中的查询。 Could anyone please let me know if there is anything wrong with the query. 有人可以让我知道查询是否有问题。

Query 1  in MS Access
SELECT [TableA].Mat, [TableA].Sg, [TableA].Pt, [TableB].[Ptype]
FROM [TableA] INNER JOIN [TableB] ON [TableA].Sg=[TableB].Sg
WHERE ((([TableA].Dl)="04") And [TableB].[Ptype]<>"dummy") - TableFinal

Query2 in MS Access
SELECT DISTINCT TableFinal.Mat, TableFinal.Sg, IIf(TableFinal.Pt Is Null,[TableD].Pt,TableFinal.Pt) AS Pnt, [TableC].[Ptype]
FROM (TableFinal INNER JOIN [TableC] ON TableFinal.Sg=[TableC].Sg) INNER JOIN [TableD] ON ([TableC].Pt=[TableD].Pt) AND (TableFinal.Mat=[TableD].Mat)
WHERE ((([TableC].[Ptype])<>"dummy"));

Combined Query1&2 in SQL
SELECT DISTINCT [TableA].Mat, [TableA].Sg, ISNULL([TableA].Pt, [TableC].Pt) AS Pln, 
[TableB].[Ptype]
FROM  [TableA] INNER JOIN
[TableB] ON [TableA].Sg = [TableB].Sg INNER JOIN
[TableC] ON [TableB].Pt = [TableC].Pt AND 
[TableA].Mat = [TableC].Mat
WHERE ([TableB].[Ptype] <> 'dummy') AND ([TableA].Dl = '04') - Final


Query3 in MS Access
SELECT DISTINCT Final.Mat, Final.Sg, Final.Pt, IIf([TableB].[Ptype] Is Null,Final.[Ptype],[TableB].[Ptype]) AS [Pan] 
INTO Destination
FROM [TableB] RIGHT JOIN Final ON ([TableB].Pt=Final.Pt) AND ([TableB].Sg=Final.Sg);



Query3 in SQL
SELECT DISTINCT Final.Mat, Final.Sg, Final.Pt, 
ISNULL(TableB].[Ptype], Final.[Ptype]) AS [Ptype]
FROM TableB] RIGHT OUTER JOIN
Final ON [TableB].Pt = Final.Pt AND 
[TableB].Sg = Final.Sg

I'm not sure, but I think this is what you intended: 我不确定,但是我认为这是您想要的:

--Combined Query1&2 in SQL
SELECT DISTINCT
  [TableA].Mat,
  [TableA].Sg,
  ISNULL([TableA].Pt, [TableC].Pt) AS Pln,
  [TableB].[Ptype]
INTO
  #FINAL
FROM
  [TableA]
  INNER JOIN [TableB] ON [TableA].Sg = [TableB].Sg
  INNER JOIN [TableC] ON [TableB].Pt = [TableC].Pt AND
                         [TableA].Mat = [TableC].Mat
WHERE
  ([TableB].[Ptype] <> 'dummy') AND
  ([TableA].Dl = '04')

--Query3 in SQL
SELECT DISTINCT
  Final.Mat,
  Final.Sg,
  Final.Pln, --Final.Pt,
  ISNULL([TableB].[Ptype], Final.[Ptype]) AS [Ptype]
FROM
  [TableB]
  RIGHT OUTER JOIN #FINAL AS Final ON [TableB].Pt = Final.Pln AND
                                      [TableB].Sg = Final.Sg  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM