SQL需要基于日期的数据

时间:2014-08-18 08:31:39

标签: sql sql-server sql-server-2008

我一直在处理所需输出的报告。情景是,具有同一客户的多个订单的区块制造公司在不同日期下发信用订单,并且客户无论订单如何都支付部分金额。我被困在这两个表中:

Orders_master,

do_no   Client_id   Site_id Order_date  Amount
1       1           1       2013-10-27  50000
2       1           1       2013-10-29  47000
3       1           1       2013-10-15  10000

Client_payments,

P_id    Client_id   Site_id P_date      Amount
1       1           1       2013-11-05  30000
2       1           1       2013-11-10  67000
3       1           1       2013-11-20  10000

我需要帮助来编写一个查询,它给出了以下输出来自两个表的所有行,

Do_no   Client_id   Site_id Order_date  P_date      Order_amount    Payment_amount
1       1           1       2013-10-27  Null        50000           Null
2       1           1       2013-10-29  Null        47000           Null
Null    1           1       Null        2013-11-05  Null            30000
Null    1           1       null        2013-11-10  Null            67000
3       1           1       2013-11-15  Null        10000           Null
Null    1           1       Null        2013-11-20  Null            10000

下面的查询返回orders_master表的所有行,但是错过了上面显示的所需输出的最后一行,

select om.*, cp.*
from orders_master om left join
client_payment cp on 
om.order_date = cp.p_date and
om.site_id = cp.site_id
where om.site_id = 1

我尝试了不同的连接,但它不返回两列的所有行,如果返回则重复值而不是空值

1 个答案:

答案 0 :(得分:0)

看起来您希望使用UNION [ALL]来组合两个表,而不是JOIN:

SELECT  do_no,
        client_id,
        site_id,
        Order_Date,
        P_Date = NULL,
        Order_Amount = Amount,
        Payment_Amount = NULL
FROM    Orders_Master
WHERE   Site_ID = 1
UNION ALL
SELECT  do_no = NULL,
        client_id,
        site_id,
        Order_Date = NULL,
        P_Date = P_Date,
        Order_Amount = NULL,
        Payment_Amount = Amount
FROM    Client_Payments
WHERE   Site_ID = 1;

<强> Example on SQL Fiddle