select A.room,A.yd,A.deli,A.state,a.tmp
,isnull(B.name,'''') as 'name',B.kind,B.tx,b.outdate
from room_all A
left join man B on A.room=B.room
where B.tx='1' and B.name=(select top 1 name
from man
where room=B.room
order by charindex(flag,'IROD')
)
or (B.name is null )
,isnull(B.name,'''') as 'name',B.kind,B.tx,b.outdate
from room_all A
left join man B on A.room=B.room
where B.tx='1' and B.name=(select top 1 name
from man
where room=B.room
order by charindex(flag,'IROD')
)
or (B.name is null )
解决方案 »
- 有什么可以远程ip连接的,可以静默安装或绿色的数据库
- 请教一存储过程的小问题????????????????????
- 根据ID查询有的,保留空的
- SqlServer 联合视图查询速度慢
- 如何用sql语句实现将查询出的数据输出到文本文件中?
- 为什么到另一个表中结果与这里的结果不一样?
- 存儲過程可不可以放在 SELECT 語句中?
- 用户 'NT AUTHORITY\SYSTEM' 登录失败。 原因: 无法打开明确指定的数据库。 [客户端: <local machine>]
- 请问SQL中有没有语句可以设置返回的记录数?急!!!
- 如何将sql server数据导出为sql语句
- 100分求一个复杂的sql查询(100%结贴)
- sql server中怎样对数字进行千分位编辑?
room yd deli state tmp name kind tx outdate
405 1 标双房 VC 0 谢苹 散客 1 2005-09-20 00:00:00
9999 1 非住客 VC 0 张三 散客 1 2005-09-20 00:00:00
*/
同room 时flag 按 'I','R','O'顺序取,
比如 有'I'的时候取王五,没有'I'就按'R'的来取,没有'R'就按
O的来取---如上面的数据同一room的flag 'I' 或者'R' 只有可能出现一条,'O'有可能
出现多次的)谢谢
,isnull(B.name,'''') as 'name',B.kind,B.tx,b.outdate
from room_all A
left join man B on A.room=B.room
where not exists(select 1
from man
where room=B.room
and charindex(flag,'IROD')<charindex(B.flag,'IROD'))
and
B.name=(select top 1 name
from man
where room=B.room
order by charindex(flag,'IROD')
) or (B.name is null );--结果
/*
room yd deli state tmp name kind tx outdate
---------- ---- ---------- ----- ---- ---------- ---------- ---- -------------------------------
405 1 标双房 VC 0 谢苹 散客 1 2005-09-20 00:00:00.000
9999 1 非住客 VC 0 张三 散客 1 2005-09-20 00:00:00.000(2 row(s) affected)
*/
,isnull(B.name,'''') as 'name',B.kind,B.tx,b.outdate
from room_all A
left join man B on A.room=B.room
where B.name=(select top 1 name -- 这行里的name换成主键
from man
where room=B.room
order by charindex(flag,'IROD')
)
or (B.name is null );
希望按flag 'I','R','O'顺序取,
比如 有'I'的时候取王五,没有'I'就按'R'的来取,没有'R'就按
O的来取---如上面的数据同一room的flag 'I' 或者'R' 只有可能出现一条,'O'有可能
出现多次的)
create table man (room char(10),name char(10),kind char(10),tx char(1),outdate datetime,flag char(1));
insert into man values('405','王五','散客','1','2005-09-20','I');
insert into man values('405','谢苹','散客','1','2005-09-20','R');
insert into man values('9999','张三','散客','1','2005-09-20','I');
insert into man values('9999','张三','团队','0','2005-09-22','R');
insert into man values('9999','李强','自用','0','2005-09-12','O');
insert into man values('9999','赵丽','半天','1','2004-09-12','O');请教这个sql怎么写?谢谢
希望按flag 'I','R','O'顺序取,
比如 有'I'的时候取王五,没有'I'就按'R'的来取,没有'R'就按
O的来取---如上面的数据同一room的flag 'I' 或者'R' 只有可能出现一条,'O'有可能
出现多次的)
create table man (room char(10),name char(10),kind char(10),tx char(1),outdate datetime,flag char(1));
insert into man values('405','王五','散客','1','2005-09-20','I');
insert into man values('405','谢苹','散客','1','2005-09-20','R');
insert into man values('9999','张三','散客','1','2005-09-20','I');
insert into man values('9999','张三','团队','0','2005-09-22','R');
insert into man values('9999','李强','自用','0','2005-09-12','O');
insert into man values('9999','赵丽','半天','1','2004-09-12','O');希望得到结果行为
('405','王五','散客','1','2005-09-20','I');
('9999','张三','散客','1','2005-09-20','I');请教这个sql怎么写?谢谢
之所以會重複是因為有 where room=B.room 這個條件.但如果沒有這個條件,記錄又有遺失.
我想了好久, 但是還沒想出來.