回 帖 发 新 帖 刷新版面

主题:请问这个SQL应该怎么写

有这么两个表
cust_tbl
cust_id    title    e_first_name    e_last_name    address1    .
0    MR    Martin    Ma    .    
1    MR    Kirs    Cheung    .    
2    MR    Ricky    Chan    .    
3    MR    Tom    Kwan    .    
4    MR    Corporate Default    Corporate Default    .    
5    MRS    Mary     Mok    .    
.    .    .    .    .    

acc_grp_cust_tbl
acc_group    Cust_id1    Cust_id2    Cust_id3    Cust_id4
1400    0    1    2    
1500    3    4        
1600    5            
.    .    .    .    .
.    .    .    .    .


如何根据上面两个表使用SQL显示出这样一个表
ACC_GROUP    PAYEENAMES
1400    Ma Martin/Cheung Kris/Chan Ricky
1500    Kwan Tom/Corporate Default Corporate Default
1600    Mok Mary
.    .
.    .

回复列表 (共24个回复)

21 楼

[quote]"但是标准sql也有同样的类似函数就是case when  then  else  end 的标准结构"

我也没有吵架的那个意思.可以欣赏下仁兄标准的sql语句不?[/quote]

朋友看来你真的没用过oracle,decode其实就是case when只不过oracle重新封装了一下,用起来方便少写几个字而已。

前面说的话别放在心上,看你说的那么肯定,语气稍微有点冲。

改成标准sql的语句如下,其实我的语句和你的想法一样只是你是希望修改表结构,我直接用sql把结构改成纵表了。

select acc_group,MAX(case when id = '1' then name end)||MAX(case when id = '2' then '/'||name end)||
              MAX(case when id = '3' then '/'||name end)||MAX(case when id = '4' then '/'||name end)
FROM (
select '1' id,acc_group,Cust_id1 Cust_id,e_last_name||' '||e_first_name name
 from acc_grp_cust_tbl a,cust_tbl b where a.cust_id1 = b.cust_id
union all    
select '2' id,acc_group,Cust_id2,e_last_name||' '||e_first_name name
 from acc_grp_cust_tbl a,cust_tbl b where a.cust_id2 = b.cust_id
union all  
select '3' id,acc_group,Cust_id3,e_last_name||' '||e_first_name name
 from acc_grp_cust_tbl a,cust_tbl b where a.cust_id3 = b.cust_id
union all  
select '4' id,acc_group,Cust_id4,e_last_name||' '||e_first_name name
 from acc_grp_cust_tbl a,cust_tbl b where a.cust_id4 = b.cust_id) a
 GROUP BY acc_group

22 楼

我确实没有用过ORACLE 

看你的代码,是把Cust_id1    Cust_id2    Cust_id3    Cust_id4分4个case进行分别处理了.  

我的工作是程序,程序受制于数据库的结构,所以看到别人数据库表建成那样难免生气. 所以...

见笑了.   你的程序我看了   佩服!

23 楼

呵呵其实一个好的数据库也不是那么容易建的。呵呵。

24 楼

把第二个表的行列转变一下
两个表之间就要相同的列
可以建立视图

我来回复

您尚未登录,请登录后再回复。点此登录或注册