基于日期的SQL所需数据

基于日期的SQL所需数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我一直在为所需的输出编写报告。这种情况是,一家拥有同一客户的多个订单的大型制造企业在不同日期以信用证形式交付订单,客户支付部分金额,而与订单无关。我被困在这两张桌子里: 主命令 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

我一直在为所需的输出编写报告。这种情况是,一家拥有同一客户的多个订单的大型制造企业在不同日期以信用证形式交付订单,客户支付部分金额,而与订单无关。我被困在这两张桌子里:

主命令

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
我尝试了不同的联接,但它不会返回两个列的所有行,如果返回的是重复值而不是空值,则看起来您希望使用UNION[all]来组合这两个表,而不是联接:

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;

你尝试过完全外部联接吗?是的,我尝试过,但它会返回第一个表的重复行,直到它返回链接/子表的所有行。这可能是由1个订单主订单有多个付款信息引起的。您可能在客户付款数据中重复了p_日期。因此它满足了加入,@GarethD发布的内容应该是您想要的,如果是您想要的,请将其标记为接受答案 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
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
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;