我想查询两个表中的数据在一个GRID中显示出来:
一个表是:收款表,一个是付款表
其中他们都和项目表关联;
一个项目可以多次收款,也可以多次付款
收款表::项目编号,付款次数,付款金额
付款表::项目编号,收款次数,收款金额
现在我想做到查询结果::
  项目编号,付款次数,付款金额,收款次数,收款金额;
如果收款记录多余付款记录,那么查询的记录条数就取多的那个条数;;;
请问如何实现呢???

解决方案 »

  1.   

    我用JOIN写的SQL出来的结果条数是相乘的;
    有什么办法呢?
      

  2.   

    项目表: 项目编号,项目名称
    收款表::项目编号,付款次数,付款金额
    付款表::项目编号,收款次数,收款金额select x.项目编号,isnull(f.付款次数,0) 付款次数,isnull(f.付款金额,0) 付款金额,isnull(s.收款次数,0) 收款次数,isnull(s.收款金额,0) 收款金额
    from 项目表 x,收款表 s,付款表 f
    where x.项目编号=s.项目编号 and x.项目编号=f.项目编号
      

  3.   

    或者:
    select x.项目编号,isnull(f.付款次数,0) 付款次数,isnull(f.付款金额,0) 付款金额,isnull(s.收款次数,0) 收款次数,isnull(s.收款金额,0) 收款金额
    from (select distinct 项目编号 from  收款表 union select distinct 项目编号 from 付款表 ) x,收款表 s,付款表 f
    where x.项目编号=s.项目编号 and x.项目编号=f.项目编号
      

  4.   

    >>收款记录多余付款记录,那么查询的记录条数就取多的那个条数是不是这样理解:
    项目编号 付款次数 付款金额 收款次数 收款金额;
    1        2        20.00    2        20.00    
    1        3        30.00    2        20.00
    1        (NULL)   (NULL)   1        10.00
      

  5.   

    我不不就可以实现了吗?dbgird可以设置0不显示的 .
      

  6.   

    SELECT a.项目编号,
    (SELECT 付款次数 FROM 付款表 WHERE 项目编号=a.项目编号) AS 付款次数,
    (SELECT 付款金额 FROM 付款表 WHERE 项目编号=a.项目编号) AS 付款金额,
    (SELECT 收款次数 FROM 收款表 WHERE 项目编号=a.项目编号) AS 收款次数
    (SELECT 收款金额 FROM 收款表 WHERE 项目编号=a.项目编号) AS 收款金额
    FROM 项目表 a GROUP BY a.项目编号
      

  7.   

    //不好意识
    (SELECT 收款次数 FROM 收款表 WHERE 项目编号=a.项目编号) AS 收款次数,//加个逗号
      

  8.   

    select 收款表.项目编号,付款次数,付款金额,收款次数,收款金额 
      from 收款表  LEFT OUTER JOIN 付款表 
      on 收款表.项目编号=付款表.项目编号 AND 收款表.付款次数=付款表.收款次数
      WHERE 收款表.项目编号 in(
          select 项目编号 from (
            select 项目编号,count(*) a,0 b from 收款表 group by 项目编号
            union
            select 项目编号,0 a,count(*) b from 付款表 group by 项目编号) aa
          where aa.a>=aa.b)
    union
    select 收款表.项目编号,付款次数,付款金额,收款次数,收款金额 
      from 付款表  LEFT OUTER JOIN 收款表 
      on 收款表.项目编号=付款表.项目编号 AND 收款表.付款次数=付款表.收款次数
      WHERE 收款表.项目编号 in(
          select 项目编号 from (
            select 项目编号,count(*) a,0 b from 收款表 group by 项目编号
            union
            select 项目编号,0 a,count(*) b from 付款表 group by 项目编号) aa
          where aa.a<aa.b)