SQL Server WITH x AS不正确的语法

问题描述 投票:0回答:1

我正在尝试运行查询以选择所有订单,但也会显示第二个表中的客户端/客户名称,以及第三个表中的最后一个发票日期。最初我只是做一个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

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

Msg 102,Level 15,State 1,Line 1 ','附近的语法不正确。

Msg 102,Level 15,State 1,Line 3 ','附近的语法不正确。

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

sql-server join syntax
1个回答
2
投票

你的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;
© www.soinside.com 2019 - 2024. All rights reserved.