有4个表,分别为:      TA             TB             TC             TDID1  客户名称    ID2  供应商    ID3 加工商   ID4  交付单位
 1     大众       1     YQ       1   TQS      1     DELL
 2     万联       2     MC       2    KL
 3      ST        3     DY说明:ID1=ID2=ID3=ID4=NO,且标记为唯一
数据的填充顺序依次为:TA、TB、TC、TD现需要一SQL语句,要求输入NO后,显示该NO所对应的所有数据,没有数据的显示空白。
如输入1(即NO=1),查询结果为:
ID1  客户名称    ID2  供应商    ID3 加工商   ID4  交付单位
 1     大众       1     YQ       1   TQS      1     DELL输入3(即NO=3),查询结果为:
ID1  客户名称    ID2  供应商    ID3 加工商   ID4  交付单位
 3      ST        3     DY
请大虾们帮帮忙,不胜感谢。

解决方案 »

  1.   

    select * from
    TA left join TB on TA.ID = TB.ID
    left join TC on TA.ID = TC.ID
    left join TD on TA.ID = TD.ID
      

  2.   

    create function fn_qry(@id int)
    returns table
    as
    begin
    return select * from
    TA left join TB on TA.ID = TB.ID
    left join TC on TA.ID = TC.ID
    left join TD on TA.ID = TD.ID
    where ID = @id
    end--調用函數
    select * from dbo.fn_qry(1)
      

  3.   

    select max(id1) as id1,max(客户名称) as 客户名称,
    max(id2) as id2,max(供应商) as 供应商,
    max(id3) as id3,max(加工商) as 加工商,
    max(id4) as id4,max(交付单位) as 交付单位
    from (
    select id1,客户名称,
    case(null as int) as ID2,cast(null as varchar(40)) as 供应商,   
    case(null as int) as ID3,cast(null as varchar(40)) as 加工商,
    case(null as int) as ID4,cast(null as varchar(40)) as 交付单位
    from TA
    where id1=3
    union all
    select null as id1,null as 客户名称,
    ID2,供应商,   
    case(null as int) as ID3,cast(null as varchar(40)) as 加工商,
    case(null as int) as ID4,cast(null as varchar(40)) as 交付单位
    from TB
    where id2=3
    union all
    select null as id1,null as 客户名称,
    null as ID2,null as 供应商,   
    ID3,加工商,
    case(null as int) as ID4,cast(null as varchar(40)) as 交付单位
    from TC
    where id3=3
    union all
    select null as id1,null as 客户名称,
    null as ID2,null as 供应商,   
    null as ID3,null as 加工商,
    ID4,交付单位
    from TD
    where id4=3
    ) as t
      

  4.   

    drop table TA,TB,TC,TD
    go
    create table TA(ID1 INT,客户名称 varchar(10))
    create table TB(ID2 int,供应商 varchar(10))
    create table TC(ID3 int,加工商 varchar(10))
    create table TD(ID4 int,交付单位 varchar(10))
    insert into TA
    select 1,'大众'
    union all select 2,'万联'
    union all select 3,'ST'
    insert into TB
    select 1,'YQ'
    union all select 2,'MC'
    union all select 3,'DY'
    insert into TC
    select 1,'TQS'
    union all select 2,'KL'
    insert into TD
    select 1,'DELL'select ID1,
    客户名称,
    ID2=(select ID2 from TB where ID2=TA.ID1),
    供应商=(select 供应商 from TB where ID2=TA.ID1),
    ID3=(select ID3 from TC where ID3=TA.ID1),
    加工商=(select 加工商 from TC where ID3=TA.ID1),
    ID4=(select ID4 from TD where ID4=TA.ID1),
    交付单位=(select 交付单位 from TD where ID4=TA.ID1)
    from TA
    where TA.ID1=1
    /*
    ID1         客户名称       ID2         供应商        ID3         加工商        ID4         交付单位       
    ----------- ---------- ----------- ---------- ----------- ---------- ----------- ---------- 
    1           大众         1           YQ         1           TQS        1           DELL(所影响的行数为 1 行)
    */
      

  5.   

    left join 不能满足你说的要求的 有兴趣加我的qq群32097372
      

  6.   

    有一点忘了说了,就是ID是唯一但不是int型,而是varchar类型的,ID在这里不是主键。
      

  7.   

    echiynn(寶琲),你的那个出现这样的问题,能说说吗,俺确实太菜了,不好意思服务器: 消息 1075,级别 15,状态 1,过程 fn_qry,行 11
    标量值的函数中的 RETURN 语句必须含有参数。
    服务器: 消息 170,级别 15,状态 1,过程 fn_qry,行 16
    第 16 行: 'BEGIN' 附近有语法错误。
      

  8.   

    --借用4樓 gahade(与君共勉) 的數據
    drop table TA,TB,TC,TD
    go
    create table TA(ID1 varchar(2),客户名称 varchar(10))
    create table TB(ID2 varchar(2),供应商 varchar(10))
    create table TC(ID3 varchar(2),加工商 varchar(10))
    create table TD(ID4 varchar(2),交付单位 varchar(10))
    insert TA select '1','大众'
    union all select '2','万联'
    union all select '3','ST'
    insert TB select '1','YQ'
    union all select '2','MC'
    union all select '3','DY'
    insert TC select '1','TQS'
    union all select '2','KL'
    insert TD select '1','DELL'
    --創建函數
    create function fn_qry(@id varchar(2))
    returns table
    as
    return select * from
    TA left join TB on TA.ID1 = TB.ID2
    left join TC on TA.ID1 = TC.ID3
    left join TD on TA.ID1 = TD.ID4
    where ID1 = @id--調用函數
    select * from dbo.fn_qry('3')--結果
    /*
    ID1  客户名称   ID2  供应商     ID3  加工商     ID4  交付单位       
    ---- ---------- ---- ---------- ---- ---------- ---- ---------- 
    3    ST         3    DY         NULL NULL       NULL NULL(所影响的行数为 1 行)
    */
      

  9.   

    楼上的,我刚才用了你写的语句,执行的时候提示错误为:
    服务器: 消息 156,级别 15,状态 1,过程 fn_qry
    在关键字 'select' 附近有语法错误。
    就是select * from dbo.fn_qry('3')这一行
    你能正确执行?
      

  10.   

    use pubs
    drop table TA,TB,TC,TD
    go
    create table TA(ID1 INT,客户名称 varchar(10))
    create table TB(ID2 int,供应商 varchar(10))
    create table TC(ID3 int,加工商 varchar(10))
    create table TD(ID4 int,交付单位 varchar(10))
    insert into TA
    select 1,'大众'
    union all select 2,'万联'
    union all select 3,'ST'
    insert into TB
    select 1,'YQ'
    union all select 2,'MC'
    union all select 3,'DY'
    insert into TC
    select 1,'TQS'
    union all select 2,'KL'
    insert into TD
    select 1,'DELL'select ta.ID1 ,ta. 客户名称 ,   tb.ID2 , tb.供应商 ,   tc.ID3 ,tc.加工商  , td.ID4  ,td.交付单位
    from ta,tb,tc,td
    where ta.id1*=tb.id2
    and ta.id1*=tc.id3
    and ta.id1*=td.id4
    and ta.id1=3
    ---------------------
    ID1         客户名称       ID2         供应商        ID3         加工商        ID4         交付单位       
    ----------- ---------- ----------- ---------- ----------- ---------- ----------- ---------- 
    3           ST         3           DY         NULL        NULL       NULL        NULL(所影响的行数为 1 行)
      

  11.   

    echiynn(寶琲)
    你的方法可行,昨天是我自己的问题
    现在已经解决了。