【问题标题】:retrieve data from two table in sql server从 sql server 中的两个表中检索数据
【发布时间】:2016-12-26 11:43:07
【问题描述】:

我有两个表,我必须从两个表中检索数据,而不是重复行。

有表(a)

BILL_DATE   BILL_AMOUNT       
----------
20160208    94  
20160208    140     
20160208    30  
20160208    25  
20160208    14  
20160208    6   
20160208    35  
20160208    20  
20160208    35  

=========================

第二个表是(b)

我想得到这样的结果

【问题讨论】:

  • 请输入您现在使用的SQL来生成结果并描述它如何不符合您的要求。

标签: sql sql-server tsql select


【解决方案1】:

您可以在日期上使用完全外连接,以便从具有相关行的表中获取相关行:

SELECT          COALESCE(bill_date, reach_date) AS [date], 
                bill_date, bill_amount, 
                reach_date AS [recharge_date], reach_amount AS [recharge_amount]
FROM            a
FULL OUTER JOIN b on a.bill_date = b.reach_date

【讨论】:

  • 感谢您的回复。但我得到了 36 行,我只想要 13 行。这是两个表行的总和
【解决方案2】:

问题不清楚但如果你想要13行

select bill_date as "DATE", bill_date, bill_amount, null as "recharge_date" , null as "recharge_amount" 
from a
union all
select rech_date          , null     , null       , rech_date               , rech_amount              
from b;

不清楚你将如何获得 100、200、300、400 的 rech_amount

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT ISNULL(X.BILL_DATE,X.RECHARGE_DATE) AS DATE,X.*
    FROM (
           SELECT BILL_DATE,BILL_AMOUNT as BILL_AMT,null as RECHARGE_DATE,null as RECHARGE_AMT
           FROM Tablea
           UNION ALL
           SELECT null as BILL_DATE,null as BILL_AMT,RECH_DATE as RECHARGE_DATE,RECH_AMOUNT as RECHARGE_AMT                                                                        
           FROM Tableb
           ) X
    

    【讨论】:

    • 它也得到了完美的行,但相同数量的值将被删除。或获得不同的金额。
    • @KrutikaPatel 更新了我的答案,如果您有任何问题,请检查并告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多