业务表 A,结构:id,pid1,pid2,pid3,name,dept.....
1,pid1,pid2,pid3,姓名,部门
参数表 B ,结构 :pid,pname
pid1,在用
pid2,闲置
pid3,报废在表A中都是保存的参数表B的id,求如何写一条sql,通过条件如何显示的是出来的结构都是对应的参数名称,结果如下:
1,在用,闲置,报废,姓名,部门在线等......急盼!
1,pid1,pid2,pid3,姓名,部门
参数表 B ,结构 :pid,pname
pid1,在用
pid2,闲置
pid3,报废在表A中都是保存的参数表B的id,求如何写一条sql,通过条件如何显示的是出来的结构都是对应的参数名称,结果如下:
1,在用,闲置,报废,姓名,部门在线等......急盼!
解决方案 »
- 在ms sql server 2000在企业管理器里怎样加唯一约束
- 数据表排序问题,谢谢
- 能否行列对换呀???
- 如何写复杂查询
- 老师,这些是什么表来的
- 动态SQL的拼接,单引号要多少?规则有吗
- 刚来这里,气氛好好。还有问题要问... :)
- 删除主键字段重复的记录——并不是整条记录重复!我查过,无对应的历史记录
- 请问水用过EXPRESS公司的TdxBarManager,教教小弟,100分哦!!!!!!
- 是何錯誤:The number name 'awe.erp_data.dbo.pu07' contains more than the maximum number of prefixes. The maximum is 3.
- 为什么SQL我可以连接同学的电脑,同学的不能连接我的电脑
- SQL2005 Send mail配件
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
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)
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 在用 闲置 报废 姓名 部门
*/
(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]
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