我的联接派生表查询有什么问题?

时间:2019-10-10 09:54:01

标签: sql tsql

我对SQL还是很陌生,刚刚开始学习派生表。 该事物将创建两个表,一个不包含null,另一个不包含null 但我似乎无法理解为什么联接无法正常工作。 我收到错误“关键字'OUTER'附近的语法不正确”。 “关键字'ON'附近的语法不正确”。但是我还是不明白...

这是我的代码:

SELECT customer_id, order_id, order_status, shipped_date
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_status) AS rownum,
customer_id, order_id, order_status, shipped_date
FROM Sales.orders) AS T 
WHERE shipped_date IS NOT NULL

OUTER JOIN

SELECT customer_id, order_id, order_status, shipped_date
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_status) AS rownum,
customer_id, order_id, order_status, shipped_date
FROM Sales.orders) AS T2
WHERE shipped_date IS  NULL

ON T.customer_id = T2.customerid;

1 个答案:

答案 0 :(得分:3)

尝试如下

    select a.*,b.*  from (SELECT customer_id, order_id, order_status, shipped_date
    FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_status) AS rownum,
    customer_id, order_id, order_status, shipped_date
    FROM Sales.orders) AS T 
    WHERE shipped_date IS NOT NULL
   ) a    
    left JOIN

    (SELECT customer_id, order_id, order_status, shipped_date
    FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_status) AS rownum,
    customer_id, order_id, order_status, shipped_date
    FROM Sales.orders) AS T2
    WHERE shipped_date IS  NULL
   ) b    
    ON a.customer_id = b.customerid;

顺便说一句,您可以使用一个查询来完成

SELECT customer_id, order_id, order_status, shipped_date
        FROM (
        SELECT ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_status) AS rownum,
        customer_id, order_id, order_status, shipped_date
        FROM Sales.orders) AS T2
        WHERE shipped_date IS  NULL or shipped_date is not null