【问题标题】:Can anyone help me to convert Access Query to MS SQL Query谁能帮我将 Access Query 转换为 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?

标签: sql sql-server sql-server-2005 sql-server-2008 ms-access


【解决方案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,
    ...
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 2017-02-17
    • 2013-12-18
    • 1970-01-01
    • 2019-01-29
    相关资源
    最近更新 更多