现有3个表 a b c ,a中2个字段 name Id ,b中有 ID expenseB ,c中有 ID expenseC 
id是相等的,现在希望得到如下结果:
name      expensB      expenseC
A           1             null
A           null           1请问各位高手如何写查询,实现这个功能,感激不尽

解决方案 »

  1.   

    select a.name ,b.expensB,c.expenseC
    from a
    inner join b on a.id = b.id
    inner join c on a.id =c.id
      

  2.   

    select
     a.name ,b.expensB,c.expenseC
    from
     a,b,c
    where
     a.id=b.id
    and
     b.id=c.id
      

  3.   

    select a.name,expenseB,expenseC
    from a left join b on a.id=b.id
    left join c on a.id=c.id
      

  4.   

    select a.name,b.expensB,c.expenseC
    from a
    join 

    on a.id = b.id
    join 

    on a.id =c.id
      

  5.   

    select a.name , b.expenseB , c.expensec from a 
    left join b on a.id = b.id
    left join c on a.id = c.id
      

  6.   

    select [a.name],[b.expenseB],[c.expenseC] 
    From [a],[b],[c]
    Where [a.ID]=[B.ID]
    and [b.id]=[c.ID]
      

  7.   

    select [a.name],[b.expenseB],[c.expenseC] 
    From [a],[b],[c]
    Where [a.ID]=[B.ID]
    and [b.id]=[c.ID]
      

  8.   


    得到的结果如下不能得到null
    A          1.00 1.00
    A          2.00 1.00
      

  9.   

    可能我没有说清楚,我这个东西的思路是表a中存储的是项目的信息,里面包括名字,编号等等.然后每个项目中有多中类型的支出其用不同的表储存,现在要联合查询每一笔支出,要求得到的结果中没一行只显示一个类型的支出,其他类型的都为空值.使用左连接时,因为id是一样的会导致不能得到空值,请问这个设计思路能行得通嘛?不能的话需要怎么修改
      

  10.   

    declare @id varchar(10)
    declare @name1 varchar(50)
    declare @name2 varchar(50)
    declare @name3 varchar(50)create table #table3
    (
    id varchar(10),
    name1 varchar(50),
    name2 varchar(50),
    name3 varchar(50)
    )declare cur cursor for 
    select id from a
    open cur
    Fetch next From Cur into @id
    while @@fetch_status=0
    Beginselect @name1=[name] from a where id=@id
    select @name2=expenseB from b where id=@id
    select @name3=expenseC from c where id=@idinsert into #table3(id,[name1],[name2],[name3]) values (@id,@name1,@name2,@name3) Fetch Next From Cur Into @id
    end
    close cur
    Deallocate Cur
      

  11.   


    --楼主试试union all + 行转列
    select 
        name
        ,[expreseB] = case when [type] = 'B' then exprese end
        ,[expreseC] = case when [type] = 'C' then exprese end
    from
    (
    select a.name, [exprese] = b.expreseB, [type] = 'B'  from a left join b on a.id = b.id
    union all
    select a.name, [exprese] = b.expreseC, [type] = 'C' from a left join b on a.id = b.id
    ) a
      

  12.   


    --copy快了,修改一下
    --楼主试试union all + 行转列
    select 
        name
        ,[expreseB] = case when [type] = 'B' then exprese end
        ,[expreseC] = case when [type] = 'C' then exprese end
    from
    (
    select a.name, [exprese] = b.expreseB, [type] = 'B' from a left join b on a.id = b.id
    union all
    select a.name, [exprese] = c.expreseC, [type] = 'C' from a left join c on a.id = c.id
    ) a
      

  13.   

    select a.name ,b.expensB,c.expenseC
    from a
     outer apply(select expensB from b where a.id = b.id) b
     outer apply(select expensB from c where a.id = c.id) c
      

  14.   


    select a.name ,b.expensB,c.expenseC
    from a
     outer apply(select expensB from b where a.id = b.id) b
     outer apply(select expensC from c where a.id = c.id) cMODIFY
      

  15.   


    select a.name,
           expenseB = (select expenseB from b where b.id = a.id) ,
           expenseC = (select expenseC from c where c.id = a.id) 
    from a不过你最好:最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  16.   


    十分感谢13楼,此法正解
    name           expenseB expensec
    TT         32.00   NULL
    TT         21.00   NULL
    TT         NULL   60.00
    终于达到目的了