SQL Server x AS不正确的语法

时间:2019-02-19 17:03:46

标签: sql-server join syntax

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

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

  

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

     

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

导致查询失败的查询出了什么问题?

1 个答案:

答案 0 :(得分: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;