三张表
表a,字段:custcode,custname(即客户代码,客户名称)
表b,字段:deptcode,deptname(即部门代码,部门名称)
表C(单据表):字段:number,custdept,inputdate,type(即单号,客户或部门代码,录入日期,单据类型)
现在要在dbgrid中显示c表的内容
但是custdept代码要换成custname或deptname
这个select语句怎么写?
说明:
type字段,标识进货单还是部门领料单,它只有两个值:
'jh'为进货单,如type为'jh',则cuetdept代码必须到a表中找
'll'为领料单,如type为'll',则cusrdept代码必须到b表中找另外:我用ado+access,access数据库不支持case....end的sql语句
有其它解决办法也行!

解决方案 »

  1.   

    在ACCESS中有视图的,加个视图就可以了
      

  2.   

    以下代码经完全测试,请放心使用。SELECT [number], [inputdate], [custdept], IIf([type]="jh",[a].[custname],[b].[deptname]) AS TypeName, [type]
    FROM (c LEFT JOIN a ON [a].[custcode]=[c].[custdept]) LEFT JOIN b ON [b].[deptcode]=[c].[custdept];妹妹给分 : )
      

  3.   

    用联结做就没问题了,而且语义清晰。SELECT number,A.custname as name,inputdate,type 
    FROM C LEFT JOIN A ON C.custcode =A.custcode
    where c.type='jh'
    union 
    SELECT number,b.deptname as name,inputdate,type 
    FROM C LEFT JOIN B ON C.custcode =b.deptcode
    where c.type='ll'
      

  4.   

    hiflower(花):按照你的代码放进去试了,custname(即客户名称)有了,但deptname(即部门名称)看不见,没出来!你能否再看看!谢谢你!
      

  5.   

    vchoushen6(vc火神6号):谢谢你,我试一下!
      

  6.   

    不会吧?这个函数没写错吧?
    IIf([type]="jh",[a].[custname],[b].[deptname]) AS TypeName
      

  7.   

    vchoushen6(vc火神6号):你好!你的代码发生同样的情况,部门名称没出现
    空在那边,客户名称到有了!
    奇怪了?
      

  8.   

    hiflower(花) :那怎么没有type='ll'呢?
    我把你的代码拷贝进去的,就是没见部们名称出现,它空在那边。
      

  9.   

    应该不会吧,那你试上下面的.SELECT number,A.custname as name,inputdate,type 
    FROM C ,A 
    where C.custcode =A.custcode and c.type='jh'
    union 
    SELECT number,b.deptname as name,inputdate,type 
    FROM C,B
    where C.custcode =b.deptcode and c.type='ll'
      

  10.   

    因为你只有两种情况 jh 和 ll
    IIf([type]="jh",[a].[custname],[b].[deptname]) AS TypeName
    这条语句当 type="jh" 时,TypeName 列显示 custname
    当 type<>"jh" 也就是 ="ll" 时,TypeName 列显示 deptname你不会是要把它们分成两列显示吧?那这样:
    SELECT [number], [inputdate], [custdept], IIf([type]="jh",[a].[custname],"") AS TypeName, IIf([type]="ll",[b].[deptname],"") AS TypeName2, [type]
    FROM (c LEFT JOIN a ON [a].[custcode]=[c].[custdept]) LEFT JOIN b ON [b].[deptcode]=[c].[custdept];
      

  11.   

    不可能啊,除非你的 C 表中的 custdept 值既不是 custcode,也不是 deptcode
    首先检查它们的字段类型是否一致
    再检查它们的值是否对应再不行,把你的表中的数据贴出来看看
      

  12.   

    同意  vchoushen6(vc火神6号):但略修改如下:SELECT number,A.custname as name,inputdate,type 
    FROM C LEFT JOIN A ON C.custdept =A.custcode
    where c.type='jh'
    union 
    SELECT number,b.deptname as name,inputdate,type 
    FROM C LEFT JOIN B ON C.custdept =b.deptcode
    where c.type<>'jh'
      

  13.   

    是我搞错了,hiflower(花) 和vchoushen6(vc火神6号) 第一次的贴子都是正确的
    谢谢!