我一直在处理所需输出的报告。情景是,具有同一客户的多个订单的区块制造公司在不同日期下发信用订单,并且客户无论订单如何都支付部分金额。我被困在这两个表中:
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
我尝试了不同的连接,但它不返回两列的所有行,如果返回则重复值而不是空值
答案 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 强>