日期:2014-05-17  浏览次数:20512 次

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.部门编号

----------------结果----------------------------