SQL Server:联接2个表,首选一个存在冲突的表的结果

SQL Server:联接2个表,首选一个存在冲突的表的结果,sql,sql-server,join,Sql,Sql Server,Join,我有这样的表:- tblconsuptions froma idmeterdatetotal 1103/01/2014100.1 2104/01/2014184.1 3105/01/2014134.1 4106/01/2014132.4 5107/01/2014126.1 6108/01/2014190.1 而且 tblconsuptions fromb idmeterdatetotal 1101/01/2014164.1 2102/01/2014133.1 3103/01/2014136.1

我有这样的表:-

tblconsuptions froma

idmeterdatetotal
1103/01/2014100.1
2104/01/2014184.1
3105/01/2014134.1
4106/01/2014132.4
5107/01/2014126.1
6108/01/2014190.1

而且

tblconsuptions fromb

idmeterdatetotal
1101/01/2014164.1
2102/01/2014133.1
3103/01/2014136.1
4104/01/2014125.1
5105/01/2014190.1
6106/01/2014103.1
7107/01/2014164.1
8108/01/2014133.1
9109/01/2014136.1
10110/01/2014125.1
11111/01/2014190.1

我需要连接这两个表,但是如果两个表中都有同一天的条目。。。仅从tblConsumptionsFromA获取结果

因此,结果将是:-

idsource\u idmeterfromdatetotal
111B01/01/2014164.1
221B02/01/2014133.1
311A03/01/2014100.1
421A04/01/2014184.1
531A05/01/2014134.1
641A06/01/2014132.4
751A07/01/2014126.1
861A08/01/2014190.1
991B09/01/2014136.1
10101B10/01/2014125.1
11111 B11/01/2014190.1


这是我无法理解的,所以如果有人能解决。。。我会留下深刻印象的

您需要合并两个表,并从表TBLConsuptionsFromB中排除tblConsuptionsFromA中存在的记录,例如:

select ta.id, tb.id, ta.meter,
    if(ta.date is null, 'B', 'A') as from,
    if(ta.date is null, tb.date, ta.date) as date,
    if(ta.date is null, tb.total, ta.total) as total
from tblConsuptionsFromA ta
    full join tblConsuptionsFromB tb on ta.date=tb.date
Select Id, Source_ID, meter, 'A' From, Date, Total 
  FROM tblConsuptionsFromA

Union All

Select Id, Source_ID, meter, 'B' From, Date, Total 
  FROM tblConsuptionsFromB
Where Date NOT EXISTS (Select Date from tblConsuptionsFromA)

UNION
运算符用于组合两个或多个SELECT语句的结果集

 SELECT column_name(s) FROM table1
 UNION
 SELECT column_name(s) FROM table2;
工会文件如下:

ROW_NUMBER()
返回结果集中某个分区内某一行的序列号,从每个分区中第一行的1开始

 ROW_NUMBER ( ) 
    OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
第_行编号()的文档如下:

下面的SQL语句使用UNION从“tblConsuptionsFromA”表中选择所有记录,并从“tblConsuptionsFromB”表中选择部分记录


希望这能有所帮助。

这里有一种方法:

SELECT
    COALESCE(a.source_id,b.source_id) as source_id,
    COALESCE(a.meter,b.meter) as meter,
    COALESCE(a.[from],b.[from]) as [from],
    COALESCE(a.[date],b.[date]) as [date],
    COALESCE(a.total,b.total)
FROM (select source_id,meter,'b' as [from],[date],total
       from tblConsuptionsFromB) b
         left join
     (select source_id,meter,'a' as [from],[date],total
       from tblConsuptionsFromA) a
         on
            a.meter = b.meter and
            a.[date] = b.[date]
不幸的是,没有像
COALESCE(a.*,b.*)
这样的速记方法可以将

SELECT
    COALESCE(a.source_id,b.source_id) as source_id,
    COALESCE(a.meter,b.meter) as meter,
    COALESCE(a.[from],b.[from]) as [from],
    COALESCE(a.[date],b.[date]) as [date],
    COALESCE(a.total,b.total)
FROM (select source_id,meter,'b' as [from],[date],total
       from tblConsuptionsFromB) b
         left join
     (select source_id,meter,'a' as [from],[date],total
       from tblConsuptionsFromA) a
         on
            a.meter = b.meter and
            a.[date] = b.[date]