Sql 如何使用公共表表达式进行筛选

Sql 如何使用公共表表达式进行筛选,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,有人愿意为我指出正确的方向吗?我正在使用AdventureWorks2012数据库完成一些培训,我不太确定如何解决一个问题,即我需要找到所有未使用海外-豪华或隔夜J-FAST ShipMethod发货方法的采购订单SalesOrderHeader,我必须使用通用表表达式来完成此操作 以下是我到目前为止得出的结论,这似乎是不正确的: WITH filteredshipmethods (ShipMethodID, Name, PurchaseOrderNumber) as (SE

有人愿意为我指出正确的方向吗?我正在使用AdventureWorks2012数据库完成一些培训,我不太确定如何解决一个问题,即我需要找到所有未使用海外-豪华或隔夜J-FAST ShipMethod发货方法的采购订单SalesOrderHeader,我必须使用通用表表达式来完成此操作

以下是我到目前为止得出的结论,这似乎是不正确的:

 WITH filteredshipmethods (ShipMethodID, Name, PurchaseOrderNumber)
    as 
    (SELECT Purchasing.PurchaseOrderHeader.ShipMethodID, Purchasing.ShipMethod.Name, Sales.SalesOrderHeader.PurchaseOrderNumber
FROM     Purchasing.PurchaseOrderHeader INNER JOIN
                  Purchasing.ShipMethod ON Purchasing.PurchaseOrderHeader.ShipMethodID = Purchasing.ShipMethod.ShipMethodID INNER JOIN
                  Sales.SalesOrderHeader ON Purchasing.ShipMethod.ShipMethodID = Sales.SalesOrderHeader.ShipMethodID
WHERE   Purchasing.ShipMethod.Name <> 'OVERSEAS - DELUXE' AND Purchasing.ShipMethod.Name <> 'OVERNIGHT J-FAST' And PurchaseOrderNumber is not null)
    SELECT PurchaseOrderNumber, ShipMethodID, Name
    From filteredshipmethods
    Group By ShipMethodID, Name, PurchaseOrderNumber
    Order By Name;

如果任务是查找SalesOrderHeader,那么为什么要加入PurchaseOrderHeader?请使用别名,它将帮助您最小化代码并更好地理解您拥有的内容。请尝试:

WITH    filteredshipmethods
          AS ( SELECT   soh.PurchaseOrderNumber ,
                        sm.ShipMethodID ,
                        sm.Name
               FROM     Sales.SalesOrderHeader soh
                        INNER JOIN Purchasing.ShipMethod sm ON soh.ShipMethodID = sm.ShipMethodID
               WHERE    sm.Name <> 'OVERSEAS - DELUXE'
                        AND sm.Name <> 'OVERNIGHT J-FAST'
             )
    SELECT  PurchaseOrderNumber ,
            ShipMethodID ,
            Name
    FROM    filteredshipmethods
    GROUP BY PurchaseOrderNumber ,
            ShipMethodID ,
            Name

这个SQL有什么问题?请发布错误或问题此处是输出的屏幕截图。我只收到一个发货方法,这一定意味着我的和/或是不正确的?你真的不需要一个通用的表表达式。。。。这是一个非常直接的向前选择查询……目前的查询只返回ShipMethodID为5的采购订单;总共有5个不同的方法ID。我应该看到所有的采购订单,除了3和4的运输方式的采购订单。有方法1,向下滚动。方法2不在表SalesOrderHeaderOnly中,问题是。如果我在Purchasing.PurchaseOrderHeader上运行查询并筛选出shipmethodID为3&4;我得到了许多PurchaseOrderID和我查询中不存在的所有其他shipMethodID。不要按ShipMethod连接PurchaseOrderHeader和SalesOrderHeader。这是毫无意义的嗯。。。据我所见,我只能从SalesOrderHeader获取PurchaseOrderNumber