三张表
表a,字段:custcode,custname(即客户代码,客户名称)
表b,字段:deptcode,deptname(即部门代码,部门名称)
表z, 字段: ckcode,ckname(即仓库代码,仓库名称)
表C(单据表):字段:number,custdept,inputdate,ckcode,type(即单号,客户或部门代码,录入日期,仓库代码,单据类型)
现在要在dbgrid中显示c表的内容
但是custdept代码要换成custname或deptname
******仓库代码要换成仓库名称,并且c表中的仓库代码有可能是空字符串,如为空字符串,则仓库名称也为空;*****************
这个select语句怎么写?
说明:
type字段,标识进货单还是部门领料单,它只有两个值:
'jh'为进货单,如type为'jh',则cuetdept代码必须到a表中找
'll'为领料单,如type为'll',则cusrdept代码必须到b表中找另外:我用ado+access,access数据库不支持case....end的sql语句
有其它解决办法也行!
此问题是对下面问题的补充:
http://expert.csdn.net/Expert/topic/2231/2231307.xml?temp=.3697779
大部分已解决,主要是如何把******中的问题加进去?

解决方案 »

  1.   

    select number,a.custname as custdept,inputdate,ckcode,type from C left outer join a on c.custdept=a.custcode
    where type='jh' and ckcode is not null
    union all
    select number,b.deptname as custdept,inputdate,ckcode,type from C left outer join a on c.custdept=b.deptcode
    where type='ll' and ckcode is not null
    union all
    select number,custdept,inputdate,ckcode,type from C
    where  ckcode is null
      

  2.   

    建議建一個新表,把C表分裂。那你的問題就簡單多了,要查所有單據時,只要使用 union 就可以了。
      

  3.   

    在原有基础上,再加一个 LEFT JOIN 即可SELECT [number], [inputdate], [custdept], IIf([type]="jh",[a].[custname],[b].[deptname]) AS TypeName, [z].[ckname], [type]
    FROM ((c LEFT JOIN a ON [a].[custcode]=[c].[custdept]) LEFT JOIN b ON [b].[deptcode]=[c].[custdept]) LEFT JOIN z ON [c].[ckcode]=[z].[ckcode];
      

  4.   

    select t2.number,t2.name,t2.inputdate, z.ckName,c.type
    from (select t1.number,iif(type='ll',deptname,name1) as 
                 name,c.inputdate,c.ckcode,c.type
          from (SELECT c.number, iif(type='jh',custname,custcode) as name1,
                       c.inputdate,c.ckcode ,c.type
                FROM a RIGHT JOIN c ON a.custcode = c.custdept
               ) as t1 left join b on t1.name1=b.deptcode
         ) as t2 left join z on t2.ckcode=z.ckcode