【问题标题】:SQL Server WITH x AS Incorrect SyntaxSQL Server WITH x AS 语法不正确
【发布时间】:2019-02-19 17:03:46
【问题描述】:

我正在尝试运行查询以选择所有订单,但还显示第二个表中的客户/客户名称,以及第三个表中的最后发票日期。最初我只是做一个INNER JOIN 来获取发票日期,但是只显示有发票的订单(我也需要包括没有发票的订单,所以我知道应该使用右/左连接),但是第二个问题是它多次显示带有多张发票的订单。例如。如果一个订单有 3 个不同的发票日期,则每个日期都会有一行,而不是最后一个发票日期的一行。

我现在正尝试使用此查询来获取正确的数据

WITH inv AS 
(
    SELECT 
        CASE moi.orderNumber,
        MAX(moi.datePosted) lastInvoiceDate 
    FROM 
        tblManOrderInvoices moi 
    GROUP BY moi.orderNumber
) 
SELECT 
    CASE mo.orderNumber, 
    c.companyName, 
    inv.lastInvoiceDate 
FROM 
    tblManOrders mo 
LEFT JOIN 
    tblClients c ON mo.clientId = c.clientId 
LEFT JOIN 
    inv ON mo.orderNumber = inv.orderNumber 
WHERE 
    ISNULL(mo.isDeleted, 0) = 0 
ORDER BY 
    mo.orderNumber

但我得到一个错误(两个,但在不同的地方同样的错误)

消息 102,第 15 级,状态 1,第 1 行
',' 附近的语法不正确。

消息 102,第 15 级,状态 1,第 3 行
',' 附近的语法不正确。

我的查询有什么问题导致它失败?

【问题讨论】:

  • CASE moi.orderNumber, MAX(moi.datePosted)? yoru CASE 表达式的其余部分在哪里?

标签: sql-server join syntax


【解决方案1】:

您的CASE 是不必要的,:

WITH inv AS (
     SELECT moi.orderNumber, MAX(moi.datePosted) as lastInvoiceDate 
     FROM tblManOrderInvoices moi 
     GROUP BY moi.orderNumber
) 
 SELECT  mo.orderNumber, c.companyName, inv.lastInvoiceDate 
 FROM tblManOrders mo LEFT JOIN 
      tblClients c 
      ON mo.clientId = c.clientId LEFT JOIN 
      inv 
      ON mo.orderNumber = inv.orderNumber 
 WHERE mo.isDeleted IS NOT NULL 
 ORDER BY mo.orderNumber;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-07
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多