2017-04-03 74 views
0

我有下面的情况,在这里我要来从第一台&匹配的记录从第二&所有不同的记录不匹配显示为0,如何从第一个表中选择行并在另一个表中匹配条目?

Table1 
id group 
1 a 
2 b 
3 c 
4 a 
5 b 

表1有组数据,

Table2 
m_id group Available Flag 
1   a  100  A 
2   a  200  A 
2   b  100  A 
3   b  150  A 
3   c  280  A 
4   a  -50  D 
4   b  20  D 

表2具有项目数据可通过分组明细,

我想要的组列表项目可用与Flag = A, 所需的输出,

m_id group Available 
1  a  100 
1  b  0 
1  c  0 
2  a  200 
2  b  100 
2  c  0 
3  a  0 
3  b  150 
3  c  280 

我试过这个通过左连接,但它没有给出所需的输出。

输出是,

M_ID GROUP Available 
    1 a  100 
    2 a  200 
    2 b  100 
    3 c  280 
    3 b  150 

请建议我所需的输出。

+0

M_Id如何生成4?为什么不是3?你在找什么下一张唱片? –

+0

对不起,我尝试了很多不同的方式,现在更新了实际。 –

回答

4

使用cross join生成所有行,然后left join中的值,使:

select m.M_ID, g.GROUP, coalesce(t2.Available, 0) as Available 
from #temp g cross join 
    (select t2.m_id 
     from #temp2 t2 
     where flag = 'A' 
     group by t2.m_id 
    ) m left join 
    #temp2 t2 
    on t2.GROUP = g.GROUP and t2.m_id = m.m_id; 

根据您的样本数据,你有#temp2没有重复,因此无需聚集。当然,如果你确实有重复的话,做聚合很容易。

+0

请建议聚合,因为数据会增加。 –

+0

@AmrutGaikwad。 。 。您的示例数据没有需要聚合的重复项。 –

0
create table Table1 (id int, [group] char(1)) 
    insert table1 values(1,'a'),(2,'b'),(3,'c') 

    create table Table2 (m_id int, [group] char(1), Available int) 
    Insert Table2 values (1,'a',100),(2,'a',200),(2,'b',100),(3,'b',150),(3,'c',280) 

    select distinct t2_1.m_id, t1.[group], isnull(t2_2.Available,0) as Available 
    from Table2 t2_1 cross join table1 t1 
    left join Table2 t2_2 on t2_1.m_id=t2_2.m_id and t2_2.[group]=t1.[group] 
相关问题