一个表内的多个ID用另一个表内的名称替换

条件描述

       两个物理表:市直单位基本信息表(T_UnitBaseInfo),记录所有的市直单位信息,如:市直单位ID,市直单位名称,市直单位状态,是否参评;市直单位定量指标表(T_UnitQuantifyTarget),记录每个定量指标,针对每个参评市直单位的描述,如:指标ID,指标名称,指标权重,参评市直单位ID,考核该指标的单位1ID,考核该指标的单位1ID考核该指标的单位1ID。考核指标单位的个数小于等于3,考核指标的单位都是市直单位。

问题描述

       从数据库中查询出一张表:将T_UnitQuantifyTarget表中的考核该指标的单位ID换成相应的市直单位名称。

解决方法

       1、从T_UnitQuantifyTarget表中获得“考核该指标的单位1ID”不为NULL的“指标ID”和考核该指标的单位1ID”的Unit1表;

       2、从T_UnitQuantifyTarget表中获得“考核该指标的单位2ID”不为NULL的“指标ID”和“考核该指标的单位2ID”的Unit2表;

       3、从T_UnitQuantifyTarget表中获得“考核该指标的单位3ID”不为NULL的“指标ID”和“考核该指标的单位3ID”的Unit3表;    

       4、将Unit1、Unit2和Unit3合并为一张表UnitT1,字段为:指标ID,考核该指标的单位1名称,考核该指标的单位2名称,考核该指标的单位3名称。

       5、通过查询UnitT1和T_UnitQuantifyTarget,得到最终结果。

具体Sql代码

create view V_UnitQulityTarget
as
	with Unit1
	as
	(
		select id,DepartmentName from T_UnitBaseInfo as u1,T_UnitQuantifyTarget as t1 where u1.CityID=t1.ResponsibilityUnit1
	),
	Unit2
	as
	(
		select id,DepartmentName from T_UnitBaseInfo as u1,T_UnitQuantifyTarget t1 where u1.CityID=t1.ResponsibilityUnit2
	),
	Unit3
	as
	(
		select id,DepartmentName from T_UnitBaseInfo as u1,T_UnitQuantifyTarget t1 where u1.CityID=t1.ResponsibilityUnit3
	),
	UnitT1
	as
	(
		select 
			Unit1.id as ID1,Unit2.id as ID2,Unit3.id as ID3,Unit1.DepartmentName as ResponsibilityUnit1Name,Unit2.DepartmentName as ResponsibilityUnit2Name,Unit3.DepartmentName as ResponsibilityUnit3Name
		from 
			Unit1 full outer join  
				(
					Unit2 full outer join Unit3
					on Unit2.id = Unit3.id
				)
			on
				Unit1.id = Unit2.id
	),
	UnitT2
	as
	(
		select
			case when ID1 IS null then
				case 
					when ID2 IS null then ID3 
				else
					ID2
				end
			else
				ID1
			end
			as targetID, ResponsibilityUnit1Name,ResponsibilityUnit2Name,ResponsibilityUnit3Name
		from 
			UnitT1
	)
	select 
		T2.Id as targetID,
		Name,Type,Weight,
		case 
			when T1.ResponsibilityUnit1Name IS NULL then T2.ResponsibilityUnit1
			else T1.ResponsibilityUnit1Name
		end as ResponsibilityUnit1Name
		,
		case	
			when T1.ResponsibilityUnit2Name is null then T2.ResponsibilityUnit2
			else t1.ResponsibilityUnit2Name
		end as ResponsibilityUnit2Name
		,
		case	
			when T1.ResponsibilityUnit3Name is null then T2.ResponsibilityUnit3
			else T1.ResponsibilityUnit3Name
		end as ResponsibilityUnit3Name
		,
		YearTime,CityUnitId,Timestamp, IfRecord
	from 
		T_UnitQuantifyTarget as T2 left outer join UnitT2 as T1 on T1.targetID = T2.Id

附录图片

T_UnitBaseInfo


T_UnitQuantifyTarget


最终结果图


总结

       遇到一个十期美女,你脑子里想到的是,真漂亮,要是她能做我女朋友该多好啊;听到米老师讲课,你脑子里想到的是,课讲的真好,要是能天天听到他讲课该多好啊;编写程序时,你脑子想到是,我要实现这么一个功能。这些都说明了,当我们遇到“事” 时,我们会在不知不觉中有了自己的目标,但是为什么大多数的我们没有实现这个目标或根本就不把“这个”当成一会事呢?
       这是因为我们之前想到“这个”的时候,被“别人”领到了另一条路上,这个就不多说了,之后有机会再说。不要让自己的思维停留在想要的结果上,应该停留在具体的实现方法上,停留在结果上会是你觉得实现困难很大,其实并不大,而是你不能清除的了解它,把思维放在方法上,可以实现困难的封装。封装困难,让困难变得更加清晰。

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值