以下是我们需要加入以获取数据的3个表
TableA TableB TableC
AId BId Name CId DeclareDate value
1 1 abc 1 September 11
2 2 def 1 October 12
3 3 xyz 1 November 13
4 4 pqr 1 December 14
5 5 ghi 2 September 15
3 October 16
4 August 17
5 October 18
5 December 19
从TableC我们有相同的基金,CId 1在所有4个月内都宣布,在这种情况下我只需要12月份行,如果基金没有在12月宣布那么我需要得到该C id的零值。 所以输出表应该如下所示。
输出表
AId BId name DeclareDate value
1 1 abc December 14
2 2 def null null
3 3 xyz null null
4 4 pqr null null
5 5 ghi december 19
所以最后如果12月没有声明日期,则返回null,如果有多个声明日期,则返回12月记录。
请建议。
答案 0 :(得分:2)
使用左连接到表C
select a.*,b.*, c.DeclareDate, c.Value from TableA a
inner join TableB b on a.AI =b.BId
left join
(select * from TableC where DeclareDate='December') c
on b.BId = c.CId
输出
答案 1 :(得分:0)
如果你的意思是说DeclareDate是一个实际的日期,而你只想要12月的值,那么这样的东西可能有用吗?
select
a.AId, b.BId, b.Name,
coalesce (c.CId, A.AId) as CId,
c.DeclareDate, c.Value
from
TableA a
join TableB b on a.AId = b.BId
left join TableC c on
a.AId = c.CId and
extract (month from c.DeclareDate) = 12
这假定了很多 - 特别是如果你在12月有多个日期,他们都会出现。此外,它没有检查年份......任何旧的12月是否足够?
如果你的字面意思是文字字符串" 12月"那么您可以将左连接中的第二个条件更改为c.DeclareDate = 'December'
。
如果您有更广泛的例子,可能会有助于确定逻辑。
- 编辑 -
以下是一些构建和测试的示例代码:
insert into tablea values (1);
insert into tablea values (2);
insert into tablea values (3);
insert into tablea values (4);
insert into tablea values (5);
insert into tableb values (1, 'abc');
insert into tableb values (2, 'def');
insert into tableb values (3, 'xyz');
insert into tableb values (4, 'pqr');
insert into tableb values (5, 'ghi');
insert into tablec values (1, 'September', 11);
insert into tablec values (1, 'October', 12);
insert into tablec values (1, 'November', 13);
insert into tablec values (1, 'December', 14);
insert into tablec values (2, 'September', 15);
insert into tablec values (3, 'October', 16);
insert into tablec values (4, 'August', 17);
insert into tablec values (5, 'October', 18);
insert into tablec values (5, 'December', 19);
解决方案:
select
a.AId, b.BId, b.Name,
coalesce (c.CId, A.AId) as CId,
c.DeclareDate, c.Value
from
TableA a
join TableB b on a.AId = b.BId
left join TableC c on
a.AId = c.CId and
c.DeclareDate = 'December';
结果:
AID BID NAME CID DECLAREDATE VALUE
1 1 abc 1 December 14
2 2 def 2
3 3 xyz 3
4 4 pqr 4
5 5 ghi 5 December 19
答案 2 :(得分:0)
试试这个
从TABLEA中选择a.AID,b.DeclareDate,b.VAL左外连接(从TABLEB中选择*,其中DeclareDate ='December')b a.AID = b.BID顺序a.AID asc
< p>