请教各位DX
现在有6张表 a,b,c,d,e,f
a表
LSH (PK)
zxrq (日期)
XMBM 
fphm
ksbh
ghb表
LSH (PK和a表关联)
BAH
brxmc表
LSH (pk和a表关联)
rysj (进入日期)
cysj (离开日期)d表
LSH(pk和a表关联)
zd  (一个LSH可以有多个zd)
sxe 表
ygh (和A表的gh关联)
xmf 表
hm (和A表的ksbh关联)
ksmc现在要查a表2009年xmbm='123',fphm不为空,d.sx='03'且只选第一条的zd 并且按照b.bah,b.brxm,d.zd,c.rysj,c.cysj,e.xm,f.ksmc 这样的格式显示数据

解决方案 »

  1.   

    按d表什么字段排序选择第一条的zd?
    使用分析函数row_number()就行了
      

  2.   

    就是D表中sx='03'和a表lsh相同的也可能有不止一条记录,最后数据显示只要任一条zd就可以的
      

  3.   

    SELECT b.bah,b.brxm, d.zd, c.rysj, c.cysj, e.xm, f.ksmc
      FROM a,
           b,
           c,
           (SELECT *
              FROM d
             WHERE ROWID =
                   (SELECT MAX(ROWID) FROM d WHERE d.sx = '03' GROUP BY d.zd)) d,
           e,
           f
     WHERE a.lsh = b.lsh
       AND a.lsh = c.lsh
       AND a.lsh = d.lsh
       AND a.gh = e.ygh
       AND a.ksbh = f.hm
       AND a.xmbm = '123'
       AND a.fphm IS NOT NULL;
      

  4.   

    (SELECT *
              FROM d
             WHERE ROWID =
                   (SELECT MAX(ROWID) FROM d WHERE d.sx = '03' GROUP BY d.zd)) d
    能不能解析一下这条语句,我用你写的语句查询,没有查到记录。d表同a表流水号相同的并且d.sx='03'时,可能有多条记录, 用select * from d where  and sx='03';查出来的数据 :
    lsh  zd sx
    1    x  03
    1    xx 03
    1    xxx 03
    2    y  03 
    ..   ..  ..
    ..   ..  ..
    现在想在原要求下最后查出的结果 相同的lsh只需显示一条zd,而不是将所有的zd显示出来
      

  5.   

    (SELECT *
      FROM d
      WHERE ROWID in  (SELECT MAX(ROWID) FROM d WHERE d.sx = '03' GROUP BY d.zd)) d
    把rowid “=” 换为in