客户表corp
corp_id corp_name
1 上海大众
2 长江实业
3 东方航空
---
联系人表
linkman_id linkman_name corp_id(所属客户ID) linkman_main(是否是主联系人,1表示是)
1 张飞 1 1
2 小强 1 1
3 小宝 2 1
4 王麻子 2 0
5 张德帅 3 0
---
如果某客户对应联系人表中有多个主联系人,将第一个做为默认联系人
如果某客户对应联系人表中只有一个主联系人,将此做为默认联系人
如果某客户对应联系人表中没有主联系人,将第一个联系人作为默认联系人最后得到
corp_id corp_name linkman_name
1 上海大众 张飞
2 长江实业 小宝
3 东方航空 张德帅
corp_id corp_name
1 上海大众
2 长江实业
3 东方航空
---
联系人表
linkman_id linkman_name corp_id(所属客户ID) linkman_main(是否是主联系人,1表示是)
1 张飞 1 1
2 小强 1 1
3 小宝 2 1
4 王麻子 2 0
5 张德帅 3 0
---
如果某客户对应联系人表中有多个主联系人,将第一个做为默认联系人
如果某客户对应联系人表中只有一个主联系人,将此做为默认联系人
如果某客户对应联系人表中没有主联系人,将第一个联系人作为默认联系人最后得到
corp_id corp_name linkman_name
1 上海大众 张飞
2 长江实业 小宝
3 东方航空 张德帅
解决方案 »
- 【求助】如下sql 语句如何写.....
- SQL2000如何将数据导出为.SQL结尾的文件
- 请教一个菜菜的问题,谢谢
- 高分求SQL SELECT语句...
- 用dts包,把文本导入数据库,怎么判断文本文件中的数据已经在数据库中存在.高手来看看,提供思路的有分.
- SQL表设计时为什么不能修改类型为NUMERIC的字段宽度?
- 在查询分析器中如何查询某字段中的值是否为日期类型
- *********** xml解析问题 **************
- 知道一个月的日期和对应的星期,放入一个日历表中;求大神精简计算方法;
- sqlserver2000数据同步的问题
- 怎样把sql查询出的0数据置空
- DBA该怎么走?
if object_id('[客户表corp]') is not null drop table [客户表corp]
create table [客户表corp]([corp_id] int,[corp_name] varchar(8))
insert [客户表corp]
select 1,'上海大众' union all
select 2,'长江实业' union all
select 3,'东方航空'
--> 测试数据:[联系人表]
if object_id('[联系人表]') is not null drop table [联系人表]
create table [联系人表]([linkman_id] int,[linkman_name] varchar(6),[corp_id] int,[linkman_main] int)
insert [联系人表]
select 1,'张飞',1,1 union all
select 2,'小强',1,1 union all
select 3,'小宝',2,1 union all
select 4,'王麻子',2,0 union all
select 5,'张德帅',3,0select *,
isnull((select top 1 [linkman_name] from [联系人表] where [corp_id]=t.[corp_id] and [linkman_main] = 1),
(select top 1 [linkman_name] from [联系人表] where [corp_id]=t.[corp_id]))
as [linkman_name]
from [客户表corp] t
---------------------------------
1 上海大众 张飞
2 长江实业 小宝
3 东方航空 张德帅
if object_id('tempdb.dbo.#corp') is not null
drop table #corp;
gocreate table #corp(corp_id int,corp_name varchar(50))
insert #corp
select 1,'上海大众' union all
select 2,'长江实业' union all
select 3,'东方航空'
if object_id('tempdb.dbo.#linkman') is not null
drop table #linkman;
gocreate table #linkman(linkman_id int,linkman_name varchar(20),corp_id int,link_main bit)
insert #linkman
select 1,'张飞',1,1 union all
select 2,'小强',1,1 union all
select 3,'小宝',2,1 union all
select 4,'王麻子',2,0 union all
select 5,'张德帅',3,0select * from #corp
select * from #linkmanselect a.corp_id, a.corp_name,b.linkman_name
from #corp a inner join
(
select corp_id,
max(case when link_main = 1 then linkman_name when link_main = 0 then linkman_name end) linkman_name
from #linkman group by corp_id
) b on a.corp_id = b.corp_idcorp_id corp_name linkman_name
----------- -------------------------------------------------- --------------------
1 上海大众 张飞
2 长江实业 小宝
3 东方航空 张德帅(所影响的行数为 3 行)
如果要得到
corp_id corp_name linkman_name linkman_id
1 上海大众 张飞 1
2 长江实业 小宝 3
3 东方航空 张德帅 5
应该如何写
,(select linkman_name,corp_id from [联系人表] l,(select min(linkman_id) as linkman_id from [联系人表] l group by l.corp_id) li
where l.linkman_id =li.linkman_id
) tt where tt.corp_id=c.corp_id
corp_id corp_name linkman_name
----------- -------------------------------------------------- --------------------
1 上海大众 张飞
2 长江实业 小宝
3 东方航空 张德帅*/