求SQL语句 select * from tb where left(调整日期,6)='200709' 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select * from tb where left(调整日期,6)='200709' and 调整原因='不适应' select * from tb where left(终止日期,6)='200709' and 调整原因='不适应' select * from tb where convert(varchar(7),终止日期,120) = '2007-09' select * from tb where convert(varchar(7),终止日期,120) = '2007-09' select * from tbwhere 起始日期>='20070101' and 终止日期<='20070930' create table tb(id int, 人员ID varchar(10), 床位ID int, 起始日期 datetime, 终止日期 datetime, 调整原因 varchar(10))insert into tb values(1 , '001' , 1201 , '20050901' , '20070902', '不适应') insert into tb values(2 , '001' , 1310 , '20070903' , '20080101', '')insert into tb values(3 , '002' , 1501 , '20070101' , '20070910', '不适应') insert into tb values(4 , '002' , 1802 , '20070911' , '20080101', '')insert into tb values(5 , '003' , 1502 , '20050801' , '20070901', '死亡') insert into tb values(6 , '004' , 1508 , '20040101' , '20070903', '其他') goselect * from tb where convert(varchar(7),终止日期,120) = '2007-09' and 调整原因 = '不适应'/*id 人员ID 床位ID 起始日期 终止日期 调整原因 ----------- ---------- ----------- ------------------------------------------------------ ------------------------------------------------------ ---------- 1 001 1201 2005-09-01 00:00:00.000 2007-09-02 00:00:00.000 不适应3 002 1501 2007-01-01 00:00:00.000 2007-09-10 00:00:00.000 不适应(所影响的行数为 2 行)*/select id = (select count(1) from ( select * from tb where convert(varchar(7),终止日期,120) = '2007-09' and 调整原因 = '不适应') m where 人员ID < n.人员ID) + 1,人员ID , 床位ID , 起始日期 , 终止日期 , 调整原因from ( select * from tb where convert(varchar(7),终止日期,120) = '2007-09' and 调整原因 = '不适应') n/*id 人员ID 床位ID 起始日期 终止日期 调整原因 ----------- ---------- ----------- ------------------------------------------------------ ------------------------------------------------------ ---------- 1 001 1201 2005-09-01 00:00:00.000 2007-09-02 00:00:00.000 不适应2 002 1501 2007-01-01 00:00:00.000 2007-09-10 00:00:00.000 不适应(所影响的行数为 2 行)*/drop table tb DECLARE @TB TABLE(id INT, 人员ID VARCHAR(3), 床位ID INT, 起始日期 VARCHAR(8), 终止日期 VARCHAR(8), 调整原因 NVARCHAR(5))INSERT @TBSELECT 1, '001', 1201, '20050901', '20070902', N'不适应' UNION ALL SELECT 2, '001', 1310, '20070903', '20080101', N'' UNION ALL SELECT 3, '002', 1501, '20070101', '20070910', N'不适应' UNION ALL SELECT 4, '002', 1802, '20070911', '20080101', N'' UNION ALL SELECT 5, '003', 1502, '20050801', '20070901', N'死亡' UNION ALL SELECT 6, '004', 1508, '20040101', '20070903', N'其他'SELECT ID=IDENTITY(INT,1,1), 人员ID, 床位ID AS 老床位ID, 新床位ID=(SELECT 床位ID FROM @TB WHERE 人员ID=T.人员ID AND 调整原因='') , 终止日期 AS 调整日期, 调整原因 INTO #FROM @TB AS TWHERE 调整原因=N'不适应' AND NOT EXISTS(SELECT 1 FROM @TB WHERE 人员ID=T.人员ID AND 起始日期<T.起始日期)SELECT * FROM #DROP TABLE #/*ID 人员ID 老床位ID 新床位ID 调整日期 调整原因 ----------- ---- ----------- ----------- -------- ----- 1 001 1201 1310 20070902 不适应2 002 1501 1802 20070910 不适应*/ select * from tbwhere 起始日期>='20070101' and 终止日期<='20070930' and 调整原因='不适应' C++ 调用SQL的存储过程 出现字符串数据,右截位 COUNT 字段不正确或语法错误 创建视图时出现问题 IN 和EXISTS 究竟有啥区别? getdate函数显示的时间值 多行显示 数据库原理的几个基本问题 如何使用SQL2005连接SQL2000的非1433端口? MySql在命令提示符查询数据不能显示中文吗? SQL 求组 一个高手解决的问题 来看看如何实现这样的存储过程? 如何写有几个未知长度的数组参数的存储过程,进行操作 (等) sqlserver 2000 数据库为什么收缩不了? 求一sql语句
from tb
where left(调整日期,6)='200709' and 调整原因='不适应'
where 起始日期>='20070101' and 终止日期<='20070930'
insert into tb values(1 , '001' , 1201 , '20050901' , '20070902', '不适应')
insert into tb values(2 , '001' , 1310 , '20070903' , '20080101', '')
insert into tb values(3 , '002' , 1501 , '20070101' , '20070910', '不适应')
insert into tb values(4 , '002' , 1802 , '20070911' , '20080101', '')
insert into tb values(5 , '003' , 1502 , '20050801' , '20070901', '死亡')
insert into tb values(6 , '004' , 1508 , '20040101' , '20070903', '其他')
goselect * from tb where convert(varchar(7),终止日期,120) = '2007-09' and 调整原因 = '不适应'
/*
id 人员ID 床位ID 起始日期 终止日期 调整原因
----------- ---------- ----------- ------------------------------------------------------ ------------------------------------------------------ ----------
1 001 1201 2005-09-01 00:00:00.000 2007-09-02 00:00:00.000 不适应
3 002 1501 2007-01-01 00:00:00.000 2007-09-10 00:00:00.000 不适应(所影响的行数为 2 行)
*/select id = (select count(1) from
(
select * from tb where convert(varchar(7),终止日期,120) = '2007-09' and 调整原因 = '不适应'
) m
where 人员ID < n.人员ID) + 1,人员ID , 床位ID , 起始日期 , 终止日期 , 调整原因
from
(
select * from tb where convert(varchar(7),终止日期,120) = '2007-09' and 调整原因 = '不适应'
) n/*
id 人员ID 床位ID 起始日期 终止日期 调整原因
----------- ---------- ----------- ------------------------------------------------------ ------------------------------------------------------ ----------
1 001 1201 2005-09-01 00:00:00.000 2007-09-02 00:00:00.000 不适应
2 002 1501 2007-01-01 00:00:00.000 2007-09-10 00:00:00.000 不适应(所影响的行数为 2 行)
*/drop table tb
INSERT @TB
SELECT 1, '001', 1201, '20050901', '20070902', N'不适应' UNION ALL
SELECT 2, '001', 1310, '20070903', '20080101', N'' UNION ALL
SELECT 3, '002', 1501, '20070101', '20070910', N'不适应' UNION ALL
SELECT 4, '002', 1802, '20070911', '20080101', N'' UNION ALL
SELECT 5, '003', 1502, '20050801', '20070901', N'死亡' UNION ALL
SELECT 6, '004', 1508, '20040101', '20070903', N'其他'
SELECT
ID=IDENTITY(INT,1,1),
人员ID,
床位ID AS 老床位ID,
新床位ID=(SELECT 床位ID FROM @TB WHERE 人员ID=T.人员ID AND 调整原因='') ,
终止日期 AS 调整日期,
调整原因
INTO #
FROM @TB AS T
WHERE 调整原因=N'不适应' AND NOT EXISTS(SELECT 1 FROM @TB WHERE 人员ID=T.人员ID AND 起始日期<T.起始日期)SELECT * FROM #DROP TABLE #
/*
ID 人员ID 老床位ID 新床位ID 调整日期 调整原因
----------- ---- ----------- ----------- -------- -----
1 001 1201 1310 20070902 不适应
2 002 1501 1802 20070910 不适应
*/
select * from tb
where 起始日期>='20070101' and 终止日期<='20070930' and 调整原因='不适应'