100急求解决一个sql查询语句的问题。。。
现在有这样一个情况,有两张表,第一张表里面存的是部门编码和部门名称,第二张表示一个资产的详细情况,里面涉及到部门表里面的两个id,现在想建立一个视图,把第二张表了里面的id全部换成名称。具体如下:
部门表
0001 财务部
0002 行政部
资产表
资产编码 名称 所属部门 保管人 外借部门 接收人
1 电脑 0001 张三 0002 李四
想通过一个查询得到下面的结果
资产编码 名称 所属部门 保管人 外借部门 接收人
1 电脑 财务部 张三 行政部 李四
[解决办法]
你这个直接资产表 left join 部门表2次就可以了
[解决办法]
with 部门表(a,b)as(
select '0001','财务部' union all
select '0002','行政部'
)
,资产表(资产编号,名称,所属部门,保管人,外借部门,接收人)as(
select 1,'电脑','0001','张三','0002','李四'
)
select 资产编号,名称,
所属部门=(select case when a is not null then b else null end
from 部门表 where 部门表.a=a.所属部门),
保管人,
外借部门=(select case when a is not null then b else null end
from 部门表 where 部门表.a=a.外借部门),接收人
from 资产表 a
----------------------------
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2013-05-17 10:07:57
-- Version:
-- Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
--Jun 17 2011 00:54:03
--Copyright (c) Microsoft Corporation
--Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------
--> 测试数据:[资产表]
if object_id('[资产表]') is not null drop table [资产表]
go
create table [资产表]([资产编码] int,[名称] varchar(4),[所属部门] varchar(4),[保管人] varchar(4),[外借部门] varchar(4),[接收人] varchar(4))
insert [资产表]
select 1,'电脑','0001','张三','0002','李四'
--> 测试数据:[部门表]
if object_id('[部门表]') is not null drop table [部门表]
go
create table [部门表]([部门编号] varchar(4),[部门名称] varchar(6))
insert [部门表]
select '0001','财务部' union all
select '0002','行政部'
--------------开始查询--------------------------
select a.[资产编码],a.名称,b.部门名称,a.保管人,c.部门名称,a.接收人
from [资产表] a LEFT JOIN [部门表] b ON a.所属部门=b.部门编号
LEFT JOIN [部门表] c ON a.所属部门=c.部门编号
----------------结果----------------------------
/*
资产编码 名称 部门名称 保管人 部门名称 接收人
----------- ---- ------ ---- ------ ----
1 电脑 财务部 张三 财务部 李四
*/