我的表格看起来像这样: -
tblConsuptionsFromA
ID米日期总
1 1 2014年3月1日100.1
2 1 2014年4月1日184.1
3 1 2014年5月1日134.1
4 1 2014年6月1日132.4
5 1 07/01/2014 126.1
6 1 08/01/2014 190.1
和...
tblConsuptionsFromB
ID米日期总
1 1 2014年1月1日164.1
2 1 2014年2月1日133.1
3 1 2014年3月1日136.1
4 1 2014年4月1日125.1
5 1 2014年5月1日190.1
6 1 2014年6月1日103.1
7 1 07/01/2014 164.1
8 1 2014年8月1日133.1
9 1 2014年9月1日136.1
10 1 2014年10月1日125.1
11 1 11/01/2014 190.1
我需要加入这两个表,但如果两个表中同一天都有一个条目...只从tblConsumptionsFromA获取结果。
结果将是: -
ID从日期总
SOURCE_ID米 1个1 1乙2014年1月1日164.1
2 2 1乙2014年2月1日133.1
3 1 1甲2014年3月1日100.1
4 2 1的2014年4月1日184.1
5 3 1的2014年5月1日134.1
6 4 1的2014年6月1日132.4
7 5 1甲07/01/2014 126.1
8 6 1的2014年8月1日190.1
9 9 1乙2014年9月1日136.1
10 10 1乙2014年10月1日125.1
11 11 1 B 11/01/2014 190.1
这超出了我的范围,所以如果有人可以解决......我会非常感动。
答案 0 :(得分:1)
这是一种方法:
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.*)
这样的简写来将COALESCE
应用于所有列
答案 1 :(得分:0)
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
答案 2 :(得分:0)
您需要对2个表进行联合,并从tblConsuptionsFromA中出现的tabletblConsuptionsFromB中排除记录,如:
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)
答案 3 :(得分:0)
UNION
运算符用于组合两个或多个SELECT语句的结果集。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
UNION的文件在这里: http://www.w3schools.com/sql/sql_union.asp
ROW_NUMBER()
返回结果集分区中行的序号,从1开始,每个分区的第一行。
ROW_NUMBER ( )
OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
ROW_NUMBER()的文档在这里: http://technet.microsoft.com/en-us/library/ms186734.aspx
以下SQL语句使用UNION从“tblConsuptionsFromA”中选择所有记录,从“tblConsuptionsFromB”表中选择部分记录。
SELECT ROW_NUMBER() OVER(ORDER BY DATE ASC) AS 'id',
id AS 'source_id',meter, date,t AS 'from',total
FROM(
SELECT id,meter, date, 'A' AS t, total FROM tblConsuptionsFromA
UNION
SELECT id,meter, date, 'B' AS t,total FROM tblConsuptionsFromB
WHERE NOT date IN (SELECT date FROM tblConsuptionsFromA)
) AS C;
希望这有帮助。