【问题标题】:SQL required data based on date基于日期的 SQL 所需数据
【发布时间】:2014-10-11 02:54:28
【问题描述】:

我一直在为所需的输出编写一份报告。该场景是具有同一客户的多个订单的块制造公司在不同日期以信用方式交付订单,并且客户支付部分金额而与订单无关。我一直卡在这两张表里:

Orders_master,

do_no Client_id Site_id Order_date 金额 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 金额 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 空 50000 空 2 1 1 2013-10-29 空 47000 空 空 1 1 空 2013-11-05 空 30000 空 1 1 空 2013-11-10 空 67000 3 1 1 2013-11-15 空 10000 空 空 1 1 空 2013-11-20 空 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个订单主有多个付款信息。您可能在 client_payments 数据中重复了 p_date。因此它满足加入,@GarethD 发布的应该是你想要的,如果它是你想要的,请将其标记为已接受的答案

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


【解决方案1】:

看起来您想使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多