求一SQL语句。在线等

chengangcsdn 2005-06-10 10:27:06
我已有一个查询结果如下:
a.kf_id a.kh_name a.kh_sex b.roomcode b.kf_time b.end_time b.roomsum c.kh_id c.kh_name c.kh_sex c.kh_addr
1 abc 男 101 2005-06-08 2005-06-09 300 null null
null null
1 abc 男 103 2005-06-08 2005-06-09 300 null null
null null
2 cde 女 105 2005-06-08 2005-06-09 300 122 cde
女 成都市人民南路
2 cde 女 106 2005-06-08 2005-06-09 300 122 cde
女 成都市人民南路

要得到的结果。
要根据C.KH_ID来判断如果c.kh_id为null则c.kh_name c.kh_sex 用a表的相应字段来填充,如果c.kh_id不为null则用C表自己的字段。且kf_id只显示第一条记录的。
a.kf_id b.roomcode b.kf_time b.end_time b.roomsum c.kh_id c.kh_name c.kh_sex c.kh_addr
1 101 2005-06-08 2005-06-09 300 null abc 男 null
103 2005-06-08 2005-06-09 300 null abc 男 null
2 105 2005-06-08 2005-06-09 300 122 cde 女 成都市人民南路
106 2005-06-08 2005-06-09 300 122 cde 女 成都市人民南路


...全文
149 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengangcsdn 2005-06-10
  • 打赏
  • 举报
回复
大部份都正确。
现在还剩两个小问题。
1。在conchild表中同一个kf_id可能同一个房间即roomcode可能有两次。
2.在conchild表中同一个kf_id的房间即roomcode并没有排序规律。

chengangcsdn 2005-06-10
  • 打赏
  • 举报
回复
但还有一个问题。
在conchild表中同一个kf_id可能同一个房间可能有两次。
paoluo 2005-06-10
  • 打赏
  • 举报
回复
全部的


Select
(Case When Exists(Select 1 from conchild Where kf_id=a.id And roomcode<b.roomcode) Then '' Else a.kf_id End ) As kf_id,
b.roomcode,
b.kf_time,
b.end_time,
b.roomsum,
c.kh_id,
IsNull(c.kh_name,a.kh_name) As kh_name,
IsNull(c.kh_sex,a.kh_sex) As kh_sex,
c.kh_addr
from kf_getrr a
left join conchild b on a.id=b.kf_id
left join xs_client c on a.kf_id=c.kh_id
paoluo 2005-06-10
  • 打赏
  • 举报
回复
可以实现一部分要求。

Select
a.kf_id,
b.roomcode,
b.kf_time,
b.end_time,
b.roomsum,
c.kh_id,
IsNull(c.kh_name,a.kh_name) As kh_name,
IsNull(c.kh_sex,a.kh_sex) As kh_sex,
c.kh_addr
from kf_getrr a
left join conchild b on a.id=b.kf_id
left join xs_client c on a.kf_id=c.kh_id
paoluo 2005-06-10
  • 打赏
  • 举报
回复
可以实现一部分要求。
子陌红尘 2005-06-10
  • 打赏
  • 举报
回复
select
kf_id = (case when b.roomcode=(select min(roomcode) from conchild where kf_id=b.kf_id) then a.kf_id else null end),
a.kh_name,
a.kh_sex,
b.roomcode,
b.kf_time,
b.end_time,
b.roomsum,
c.kh_id,
kh_name = (case when c.kh_id is null then a.kh_name else c.kh_name end),
kh_sex = (case when c.kh_id is null then a.kh_sex else c.kh_sex end),
c.kh_addr
from
kf_getrr a
left join
conchild b
on
a.id=b.kf_id
left join
xs_client c
on
a.kf_id=c.kh_id
chengangcsdn 2005-06-10
  • 打赏
  • 举报
回复
我想过用CASE来实现。
但我实际要用的字段要多得多。这里只是例举几个。
hsanzhang 2005-06-10
  • 打赏
  • 举报
回复
好像可以用一個iif的函數吧
chengangcsdn 2005-06-10
  • 打赏
  • 举报
回复
select *
from kf_getrr a
left join conchild b on a.id=b.kf_id
left join xs_client c on a.kf_id=c.kh_id
子陌红尘 2005-06-10
  • 打赏
  • 举报
回复
a、b、c三个表通过什么字段关联?原来的查询语句是什么?
chengangcsdn 2005-06-10
  • 打赏
  • 举报
回复
高手快支招啊。

如上面我的描述不是很清楚。
只要你们提出不解的地方。
我马上说出。
chengangcsdn 2005-06-10
  • 打赏
  • 举报
回复
自己顶顶

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧