【问题标题】:SQL query works in SQL Server, fails in Excel (Microsoft Query)SQL 查询在 SQL Server 中有效,在 Excel 中失败 (Microsoft Query)
【发布时间】:2012-08-06 05:08:00
【问题描述】:

我有以下按预期工作的查询:

SELECT
        SERVICE_HISTORY.ServiceMode, SERVICE_HISTORY.CreatedDate,
        SERVICE_HISTORY.CreatedBy, SERVICE_HISTORY.Branch,
        SERVICE_HISTORY.Comments
FROM
        DEBA_US.dbo.SERVICE_HISTORY
JOIN 
        (SELECT MAX(SERVICE_HISTORY.CreatedDate) AS maxDate, CUSTOMER.AccNo
         FROM DEBA_US.dbo.CUSTOMER
         INNER JOIN (DEBA_US.dbo.SERVICE_HISTORY
                     INNER JOIN DEBA_US.dbo.CAR ON SERVICE_HISTORY.ROW_PK = CAR.ROW_PK) ON CUSTOMER.ROW_PK = CAR.ROW_PK
         WHERE
             CUSTOMER.AccNo LIKE 'CUS-1234'
             AND CAR.DateSubmitted IS NULL
         GROUP BY
             CUSTOMER.AccNo) AS testQuery ON testQuery.maxDate = SERVICE_HISTORY.CreatedDate

查询是为我提供给定客户的最新(最大)服务历史日期。

当我在 SQL Server 中执行查询时,它工作得非常好,但是当我将相同的查询放入 EXCEL 2010 (Microsoft Query) 时,它给了我错误:

没有为“testQuery”的第 1 列指定列名
列名“maxDate”无效
无法准备声明

我无法修复查询以传递错误。有人可以告诉我为什么 Excel 不能处理上述查询吗?谢谢

【问题讨论】:

  • 我通常发现 MS 查询非常有限,因此我通常会通过创建视图来简化我提供给 MS Query 的内容。如果我想要做的对于视图来说太复杂了,我将创建一个返回数组的 VBA UDF。

标签: sql sql-server excel excel-2010


【解决方案1】:

您需要将 testQuery 和 maxDate 放在单引号内

SELECT
    SERVICE_HISTORY.ServiceMode, SERVICE_HISTORY.CreatedDate,
    SERVICE_HISTORY.CreatedBy, SERVICE_HISTORY.Branch,
    SERVICE_HISTORY.Comments
FROM
    DEBA_US.dbo.SERVICE_HISTORY
JOIN 
    (SELECT MAX(SERVICE_HISTORY.CreatedDate) AS 'maxDate', CUSTOMER.AccNo
     FROM DEBA_US.dbo.CUSTOMER
     INNER JOIN (DEBA_US.dbo.SERVICE_HISTORY
                 INNER JOIN DEBA_US.dbo.CAR ON SERVICE_HISTORY.ROW_PK = CAR.ROW_PK) ON     CUSTOMER.ROW_PK = CAR.ROW_PK
     WHERE
         CUSTOMER.AccNo LIKE 'CUS-1234'
         AND CAR.DateSubmitted IS NULL
     GROUP BY
         CUSTOMER.AccNo) AS 'testQuery' ON testQuery.maxDate =  SERVICE_HISTORY.CreatedDate

【讨论】:

    【解决方案2】:

    您唯一需要做的就是在 maxDate 周围添加方括号,如下所示:

    SELECT
            SERVICE_HISTORY.ServiceMode, SERVICE_HISTORY.CreatedDate,
            SERVICE_HISTORY.CreatedBy, SERVICE_HISTORY.Branch,
            SERVICE_HISTORY.Comments
    FROM
            DEBA_US.dbo.SERVICE_HISTORY
    JOIN 
            (SELECT MAX(SERVICE_HISTORY.CreatedDate) AS [maxDate], CUSTOMER.AccNo
             FROM DEBA_US.dbo.CUSTOMER
             INNER JOIN (DEBA_US.dbo.SERVICE_HISTORY
                         INNER JOIN DEBA_US.dbo.CAR ON SERVICE_HISTORY.ROW_PK = CAR.ROW_PK) ON CUSTOMER.ROW_PK = CAR.ROW_PK
             WHERE
                 CUSTOMER.AccNo LIKE 'CUS-1234'
                 AND CAR.DateSubmitted IS NULL
             GROUP BY
                 CUSTOMER.AccNo) AS testQuery ON testQuery.maxDate = SERVICE_HISTORY.CreatedDate
    

    【讨论】:

      猜你喜欢
      • 2020-01-20
      • 1970-01-01
      • 2015-01-12
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多