业务表  A,结构:id,pid1,pid2,pid3,name,dept.....
      1,pid1,pid2,pid3,姓名,部门
参数表 B ,结构 :pid,pname
       pid1,在用
       pid2,闲置
       pid3,报废在表A中都是保存的参数表B的id,求如何写一条sql,通过条件如何显示的是出来的结构都是对应的参数名称,结果如下:
1,在用,闲置,报废,姓名,部门在线等......急盼!

解决方案 »

  1.   

    http://blog.csdn.net/claro/archive/2008/12/03/3435583.aspx
      

  2.   


    select 
    A.id,b1.pname,b2.pname,b3.pname,A.name,A.dept
    from A
    left join B b1 on a.pid1=b1.pid
    left join B b2 on a.pid2=b2.pid
    left join B b3 on a.pid3=b3.pid
      

  3.   

    LZ给出的数据缺少关联条件,参考:
    SELECT A.ID,M.[PID1],M.[PID2],M.[PID3],A.NAME,A.dept
    FROM #A a,
    (
    SELECT [PID1],[PID2],[PID3] FROM #B
    PIVOT(MAX(PNAME)FOR PID IN([PID1],[PID2],[PID3]))PVT
    )MID          PID1       PID2       PID3       NAME       dept
    ----------- ---------- ---------- ---------- ---------- ----------
    1           在用         闲置         报废         姓名         部门(1 row(s) affected)
      

  4.   

    --> 测试数据:#1
    if object_id('tempdb.dbo.#1') is not null drop table #1
    create table #1(id int, pid1 varchar(8), pid2 varchar(8), pid3 varchar(8), name varchar(8), dept varchar(8))
    insert into #1
    select 1, 'pid1', 'pid2', 'pid3', '姓名', '部门'
    --> 测试数据:#2
    if object_id('tempdb.dbo.#2') is not null drop table #2
    create table #2(pid varchar(8), pname varchar(8))
    insert into #2
    select 'pid1', '在用' union all
    select 'pid2', '闲置' union all
    select 'pid3', '报废'select a.id, b.pname, c.pname, d.pname, a.name, a.dept
    from #1 a, #2 b, #2 c, #2 d
    where a.pid1=b.pid and a.pid2=c.pid and a.pid3=d.pid/*
    id          pname    pname    pname    name     dept
    ----------- -------- -------- -------- -------- --------
    1           在用     闲置     报废     姓名     部门
    */
      

  5.   

    select id,
    (select pname from [参数表B] where pid=pid1) pid1,
    (select pname from [参数表B] where pid=pid2) pid2,
    (select pname from [参数表B] where pid=pid3) pid3,
    name,dept
    from [业务表A]
      

  6.   

    select 
    A.id,isnull(b1.pname,'') pid1,isnull(b2.pname,'') pid2,isnull(b3.pname,'') pid3,A.name,A.dept
    from A
    left join B b1 on a.pid1=b1.pid
    left join B b2 on a.pid2=b2.pid
    left join B b3 on a.pid3=b3.pid