分享
 
 
 

Sql Server 整理收集

王朝mssql·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

正在学习SQL Server 期望收集一些常见的Sql Server 问题

Sql Server问题摘要

1. 合并若干个表?

描述:建立一个新表,其字段结构是其他若干个表Join以后的结果。

解决思路:select * into 新表名 from 旧表1名,旧表2名,……

实例:

--表NewTableName的字段为表titles和titleauthor字段表相加;

---记录为记录为select * from titles,titleauthor的记录

select * into NewTableName from titles,titleauthor

--表NewTableName的字段[title_id,title,au_id]

-- 记录为select a.title_id,a.title,b.au_id from titles a,titleauthor b where a.title_id=b.title_id

select a.title_id,a.title,b.au_id into NewTableName from titles a,titleauthor b where a.title_id=b.title_id

2. 查询N-M条记录?

描述:要从记录集中取出中间一段记录来(如: 取10条中的第3-8条)

解决思路:

1. 有关键字或确保唯一的候选关键字字段:

方法1:从第n条记录开始取m-n+1条数据

方法2:升序取前m条记录最为a, 再降序从a中取m-n+1条记录作为b

2. 没有上述字段:

增加一个自增字段生成一个临时表,在从临时表中取记录[Where 自增字段名>n-1]

实例: --

--取第4到第7条记录 [对1方法一]

SELECT top 4 * FROM jobs WHERE job_id not in (SELECT top 3 job_id FROM jobs)

--[方法二]

SELECT top 4 * FROM

(SELECT top 4 * FROM

(SELECT top 7 * FROM jobs ORDER BY job_id ASC) a

ORDER BY job_id DESC

) b

ORDER BY job_id ASC

--取第2到第3条记录 [对1方法一]

select IDENTITY(int,1,1) as iid,* into #temptable from discounts select top 2 * from #temptable where iid>=2

3. 按年度季度统计汇总?

描述: 统计表employee的各年度各季度的雇佣人数

解决思路:Group by 和 [函数datepart()]

实例:

//季度:quarter

SELECT year(hire_date) 年度,datepart(q,hire_date) 季度,count(emp_id)雇佣人数 FROM employee

GROUP BY year(hire_date),datepart(q,hire_date)

ORDER BY 年度,季度

4. 随机取n条记录?

描述: 从表中随机提取n条记录

解决思路:按照用Guid

实例:

--从表中随机取5条记录

SELECT top 5 * FROM titles ORDER BY newid()

5. 求出任意时间所在季度的天数?

描述: 如题

解决思路:注意闰年

实例:

declare @t smalldatetime

select @t = '2001-4-1'

select case datepart(quarter,@t)

when 1 then

(case when (year(@t)%4=0 and year(@t)%100<>0) or year(@t)%400=0 then 91 else 90 end)

when 2 then 91

when 3 then 92

when 4 then 92

end

6. 求出任意时间的季度的第一天?

描述: 如题

解决思路: 如下

实例:

-- [思路:把日期向前推到季度的第一个月的当前号

--注意:5月31号不会推成4月31号 ,系统自动转为30号

declare @d datetime

set @d='2003-5-31'

select @d as 指定日期,

dateadd(month,-(month(@d)-1)%3,@d)-day(dateadd(month,-(month(@d)-1)%3,@d))+1 as 季度的第一天

-- [思路:分别求出年月日在转为日期型]

declare @t smalldatetime

select @t = '2001-9-30'

select cast(cast(year(@t) as varchar) + '-' + cast(3*datepart(q,@t)-2 as varchar) + '-1' as datetime)

--求当前的日期季度的第一天

select cast(cast(year(getdate()) as varchar) + '-' + cast(3*datepart(q,getdate())-2 as varchar) + '-1' as datetime)

7. 时间重叠度的问题?

出处:http://expert.csdn.net/Expert/topic/2806/2806966.xml?temp=.5277979

描述:

create table #a(id int identity(1,1),date1 datetime,date2 datetime)

insert #a select '2004-02-29 16:45:00','2004-02-29 20:45:00'

union all select '2004-02-29 18:45:00','2004-02-29 22:45:00'

union all select '2004-03-01 10:45:00','2004-03-01 13:45:00'

union all select '2004-03-01 13:45:00','2004-03-01 16:45:00'

union all select '2004-03-01 13:47:00','2004-03-01 14:25:00'

union all select '2004-03-01 16:45:00','2004-03-01 19:15:00'

union all select '2004-03-01 17:45:00','2004-03-01 18:55:00'

union all select '2004-03-01 18:45:00','2004-03-01 21:45:00'

select *from #a

我现在要找出时间上重叠超过1个小时的所有记录!

比如第1、2条:一个是从16:45---20:45,第二条是从18:45---22:45时间上重叠了2个小时,所以这两条都要取出,其它的也是一样的规则!

date2-date1小于1小时的不用考虑,如第5条。可以先删除该条,记录是按date1排序的!

所以最终的结果要为:

id date1 date2

----------- --------------------------- ---------------------------

1 2004-02-29 16:45:00.000 2004-02-29 20:45:00.000

2 2004-02-29 18:45:00.000 2004-02-29 22:45:00.000

6 2004-03-01 16:45:00.000 2004-03-01 19:15:00.000

7 2004-03-01 17:45:00.000 2004-03-01 18:55:00.000

解决思路:

实例:

--方案一:[作者:“victorycyz(中海,干活去了,不在CSDN玩。)”]

select distinct a.*

from #a a , #a b

where a.id<>b.id and

a.date1<b.date2 and a.date2>b.date1 and

(case when a.date2>b.date2 then b.date2 else a.date2 end)-

(case when a.date1>b.date1 then a.date1 else b.date1 end)>1/24.0

--方案二:[作者:“j9988(j9988)”]

select * from #a A where

exists(select 1 from #a

where id<>A.id

and dateadd(minute,60,date1)<date2

and (date1 between A.date1 and A.date2)

and abs(datediff(minute,date1,A.date2))>=60)

or

exists(select 1

from #a

where id<>A.id

and dateadd(minute,60,A.date1)<A.date2

and (A.date1 between date1 and date2)

and abs(datediff(minute,A.date1,date2))>=60)

整理中

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有