在数据库中有两个表,一个是收款金额表,是向客户收款的;一个是付款金额表,是向有关单位付款的;
收款金额表字段如下:
费用名称        金额        付款单位         内部编号
运输费         50.00           a             ZJH0001
吊装费         100.00          b             ZJH0001
海港费         90.00           c             ZJH0001
......付款金额表字段如下:
费用名称        金额        收款单位
运输费          50.00          A             ZJH0001
CFS费           79.00          B             ZJH0001
THC费           200.00         C             ZJH0001要求查询出如下格式的表应收款项        收款金额        付款人          应付款项        付款金额        收款人
运输费           50.00           a               运送费           50.00            A
吊装费           100.00          b               吊装费           0.00       
海港费           90.00           c               海港费           0.00           
CFS费                                            CFS费           79.00             B
THC费                                            THC费           200.00            C要求查询内部编号所对应的付款和收款项目,在两个表中有相同费用的全部列出费用信息
要求各个费用名称在同一行中显示在线等,谢谢!!!

解决方案 »

  1.   

    如果都不是单位而是人的话那就这样写:
    select a.费用名称 as '应收款项',a.金额 as '收款金额',a.付款单位 as '付款人',b.费用名称 as 应付款项,b.金额 as '付款金额',b.收款单位 as '收款人' from 收款金额表 as a,付款金额表 as b where (a.xxx=b.xxxx)关键你给的信息不足,不知道你到底两个表是靠什么联系起来的,所以筛选的条件得靠你自己写了
      

  2.   

    例如,如果是靠编号联系起来的话,where那句括号里的就写成a.内部编号=b.内部编号
      

  3.   

    select * from B inner join A on A.id=B.id
    关键是A B的id要等值,而且都不重复:)
    不然就用 Left out join咯,那边多就做被附加表。
      

  4.   

    SELECT A.[费用名称] [应收款项],A.[金额] [收款金额],A.[付款单位] [付款人],
    B.[费用名称] [应付款项],B.[金额] [付款金额],B.[收款单位] [收款人] FROM 
    [收款金额表] A INNER JOIN [付款金额表] B ON A.[内部编号] = B.[内部编号] AND A.[应收款项] = B.[应收款项]
      

  5.   

    SELECT A.[费用名称] [应收款项],A.[金额] [收款金额],A.[付款单位] [付款人],
    B.[费用名称] [应付款项],B.[金额] [付款金额],B.[收款单位] [收款人] FROM 
    [收款金额表] A CROSS JOIN [付款金额表] B ON A.[内部编号] = B.[内部编号] AND A.[应收款项] = B.[应收款项]
      

  6.   

    select 
    a.费用名称 as 应收款项,a.金额 as 收款金额,a.付款单位 as 付款人,
    b.费用名称 as 应付款项,b.金额 as 付款金额,b.收款单位 as 收款人
    from 收款金额表 a 
    left join 付款金额表 b
    on a.内部编号 = b.内部编号 and a.费用名称 = b.费用名称
      

  7.   

    --创建环境
    create table 收款金额表(费用名称 NVARCHAR(20),金额 DECIMAL(18,2),付款单位 NVARCHAR(100),内部编号 VARCHAR(20),PRIMARY KEY(内部编号,费用名称))
    GOCREATE TABLE 付款金额表(费用名称 NVARCHAR(20),金额 DECIMAL(18,2),收款单位 NVARCHAR(100),内部编号 VARCHAR(20),PRIMARY KEY(内部编号,费用名称))
    GO--插入测试数据
    INSERT INTO 收款金额表
    SELECT N'运输费'       ,  50.00  ,         N'a'    ,         'ZJH0001'
    UNION ALL
    SELECT N'吊装费'        , 100.00,          N'b'   ,          'ZJH0001'
    UNION ALL
    SELECT N'海港费'         ,90.00,           N'c'  ,           'ZJH0001'INSERT INTO 付款金额表
    SELECT N'运输费' ,         50.00    ,      N'A'             ,'ZJH0001'
    UNION ALL
    SELECT N'CFS费'   ,        79.00   ,       N'B'             ,'ZJH0001'
    UNION ALL
    SELECT N'THC费'    ,       200.00 ,        N'C'             ,'ZJH0001'
    --sql 语句
    --费用名称相同部分
    select s.费用名称 as 应收款项,s.金额 as 收款金额,s.付款单位 as 付款人,f.费用名称 as 应付款项,f.金额 as 付款金额,f.收款单位 as 收款人
    from 收款金额表 s inner join 付款金额表 f on s.内部编号=f.内部编号 and s.费用名称=f.费用名称
    where s.内部编号='ZJH0001'
    union all
    --收款部分
    select s.费用名称,s.金额,s.付款单位,s.费用名称,0,''
    from 收款金额表 s where s.内部编号='ZJH0001' and s.费用名称 not in(select 费用名称 from 付款金额表 where 内部编号='ZJH0001')
    union all
    --付款部分
    select f.费用名称,0,'',f.费用名称,f.金额,f.收款单位
    from 付款金额表 f where f.内部编号='ZJH0001' and f.费用名称 not in(select 费用名称 from 收款金额表 where 内部编号='ZJH0001')
    --sql语句执行结果:
    /*--------------------------------------------------------
    应收款项    收款金额    付款人    应付款项    付款金额    收款人
    运输费      50.00      a         运输费      50.00      A
    吊装费      100.00     b         吊装费      0.00
    海港费      90.00      c         海港费      0.00
    CFS费       0.00                 CFS费      79.00      B
    THC费       0.00                 THC费      200.00     C
    --------------------------------------------------------*/--清除测试环境
    drop table 收款金额表
    drop table 付款金额表
    go
      

  8.   

    用创建视图来实现代码大概如下:
    create view INOUTVIEW
    as
    select 
    a.费用名称 as 应收款项,a.金额 as 收款金额,a.付款单位 as 付款人,
    b.费用名称 as 应付款项,b.金额 as 付款金额,b.收款单位 as 收款人
    from 收款金额表 a FULL OUTER JOIN  付款金额表 b
    on a.内部编号 = b.内部编号 and a.费用名称 = b.费用名称
      

  9.   

    试试使用外连接
    Select B.费用名称 as 应收款项,B.金额 as 收款金额,A.付款单位 as 付款人,
    A.费用名称 as 应付款项,A.金额 as 付款金额,费用名称,B.收款单位 as 收款人
    From A Full Outer Join B On A.费用名称=B.费用名称       
      

  10.   

    谢谢lovvver(www.notsoft.cn)
    测试通过
      

  11.   

    用FULL OUTER JOIN  建立视图不行吗???lz,应该没问题吧