有人能帮我把Access查询转换成MS SQL查询吗

有人能帮我把Access查询转换成MS SQL查询吗,sql,sql-server,sql-server-2005,sql-server-2008,ms-access,Sql,Sql Server,Sql Server 2005,Sql Server 2008,Ms Access,您好,我有一个access查询,请任何人帮助我将查询转换为MS SQL 2008查询 与变革和支点抗争 访问查询是: TRANSFORM Count(vwg_vkCustomers.CustomerNo) AS CountOfCustomerNo SELECT vwg_vkCustomers.ClassID, vwg_vkCustomers.SubjectTypeID, vwg_vkCustomers.TutorCode FROM vwg_vkCustomers WHERE (((vwg_vkC

您好,我有一个access查询,请任何人帮助我将查询转换为MS SQL 2008查询

与变革和支点抗争

访问查询是:

TRANSFORM Count(vwg_vkCustomers.CustomerNo) AS CountOfCustomerNo
SELECT vwg_vkCustomers.ClassID, vwg_vkCustomers.SubjectTypeID, vwg_vkCustomers.TutorCode
FROM vwg_vkCustomers
WHERE (((vwg_vkCustomers.TutorCode)="123456") AND ((vwg_vkCustomers.CustomerAdded)>#6/21/2011#))
GROUP BY vwg_vkCustomers.ClassID, vwg_vkCustomers.SubjectTypeID, vwg_vkCustomers.TutorCode
PIVOT vwg_vkCustomers.Type;

谢谢

我不知道IIF的t-SQL版本,但这是不使用TRANSFORM/PIVOT的交叉表查询的Access版本。对所需的每列重复IIF表达式:

SELECT vwg_vkCustomers.ClassID, vwg_vkCustomers.SubjectTypeID, vwg_vkCustomers.TutorCode,
Sum(IIF(vwg_vkCustomers.Type="Whatever",1,0) AS TypeWhatever 
FROM vwg_vkCustomers
WHERE (((vwg_vkCustomers.TutorCode)="123456") AND ((vwg_vkCustomers.CustomerAdded)>#6/21/2011#))
GROUP BY vwg_vkCustomers.ClassID, vwg_vkCustomers.SubjectTypeID, vwg_vkCustomers.TutorCode

我不知道IIF的t-SQL版本,但这是不使用TRANSFORM/PIVOT的交叉表查询的Access版本。对所需的每列重复IIF表达式:

SELECT vwg_vkCustomers.ClassID, vwg_vkCustomers.SubjectTypeID, vwg_vkCustomers.TutorCode,
Sum(IIF(vwg_vkCustomers.Type="Whatever",1,0) AS TypeWhatever 
FROM vwg_vkCustomers
WHERE (((vwg_vkCustomers.TutorCode)="123456") AND ((vwg_vkCustomers.CustomerAdded)>#6/21/2011#))
GROUP BY vwg_vkCustomers.ClassID, vwg_vkCustomers.SubjectTypeID, vwg_vkCustomers.TutorCode

结合TimD的回答,因为我不经常和TRANSFORM争论

对于Iif,用例:


请注意,您使用的是单引号而不是双引号。

将此与TimD的答案结合起来,因为我不经常对转换进行争论

对于Iif,用例:


请注意,您使用的是单引号而不是双引号。

@Scorpion,看看这个:@Scorpion,看看这个:您觉得必须转换它的上下文是什么?@David-W-Fenton:我需要在SQL Server数据库上使用它,而不是Access…前端是什么?通道如果是这样,并且您正确地使用了ODBC链接表,那么您可能根本不需要更改它-Jet/ACE和ODBC将为您将其转换为SQL Server能够正确解释的内容。@David-W-Fenton:此查询是用Access编写的,但后端是SQL Server,我试图在SQLServer中编写类似的查询,但我发现SQLServer中的PIVOT不是很好。您必须在查询中定义列,这意味着如果您不知道列的数量或它们的变化,则无法使用PIVOT。在SQL Server中,PIVOT只在您确切知道SUN、MON、TUE、WED、THU、FRI、SAT等列数的情况下才有用。如果您是从Access执行它,为什么要重写它?Access通过ODBC发送到SQL Server的内容是否产生了错误的结果?慢吗?如果这些都不是事实,为什么您觉得需要将其转换为T-SQL?您觉得必须转换它的上下文是什么?@David-W-Fenton:我需要在SQL Server数据库上使用它,而不是Access…前端是什么?通道如果是这样,并且您正确地使用了ODBC链接表,那么您可能根本不需要更改它-Jet/ACE和ODBC将为您将其转换为SQL Server能够正确解释的内容。@David-W-Fenton:此查询是用Access编写的,但后端是SQL Server,我试图在SQLServer中编写类似的查询,但我发现SQLServer中的PIVOT不是很好。您必须在查询中定义列,这意味着如果您不知道列的数量或它们的变化,则无法使用PIVOT。在SQL Server中,PIVOT只在您确切知道SUN、MON、TUE、WED、THU、FRI、SAT等列数的情况下才有用。如果您是从Access执行它,为什么要重写它?Access通过ODBC发送到SQL Server的内容是否产生了错误的结果?慢吗?如果这些都不是事实,为什么您觉得需要将其转换为T-SQL?