谁能帮我将 Access Query 转换为 MS SQL Query
Posted
技术标签:
【中文标题】谁能帮我将 Access Query 转换为 MS SQL Query【英文标题】:Can anyone help me to convert Access Query to MS SQL Query 【发布时间】:2011-06-21 14:41:16 【问题描述】:您好,我有一个访问查询,谁能帮我把查询转换为 MS SQL 2008 查询。
与Transform
和PIVOT
斗争。
访问查询是:
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;
谢谢
【问题讨论】:
你觉得必须在什么环境下转换它? @David-W-Fenton:我需要在 SQL Server 数据库而不是 Access 上使用它... 前端是什么?使用权?如果是这样,并且您正确使用了 ODBC 链接表,您可能根本不需要更改它——Jet/ACE 和 ODBC 会为您将其转换为 SQL Server 可以正确解释的东西。 @David-W-Fenton:这个查询是用 Access 编写的,但后端是 SQL Server,我试图在 SQL Server 中编写类似的查询,但我发现 SQL Server 中的 PIVOT不是很好。您必须在 Query 中定义列,这意味着如果您不知道列数或它们不同,则不能使用 PIVOT。在 SQL Server PIVOT 中,仅在您确切知道 SUN、MON、TUE、WED、THU、FRI、SAT 等列数的情况下才有用。 如果您是从 Access 执行它,为什么要重写它? Access 通过 ODBC 向 SQL Server 发送的内容是否会产生错误的结果?慢吗?如果这些都不是,您为什么觉得需要将其转换为 T-SQL? 【参考方案1】:我不知道 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
【讨论】:
【参考方案2】:将此与 TimD 的答案结合起来,因为我不经常与 TRANSFORM
争吵......
对于Iif
,使用CASE
:
...
CASE vwg_vkCustomers.Type
WHEN 'Whatever' 1
ELSE 0
END,
...
请注意,您使用单引号而不是双引号。
【讨论】:
@Scorpion,看看这个:msdn.microsoft.com/en-us/library/ms177410.aspx以上是关于谁能帮我将 Access Query 转换为 MS SQL Query的主要内容,如果未能解决你的问题,请参考以下文章
将 MS Access 迁移到 PostgreSQL [关闭]