国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

Sql Server 整理收集

2024-08-31 00:48:23
字體:
來源:轉載
供稿:網友

正在學習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條??梢韵葎h除該條,記錄是按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)   


整理中
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中卫市| 灵丘县| 鄯善县| 当雄县| 岑溪市| 兴安县| 德化县| 灵石县| 惠水县| 海门市| 临汾市| 东明县| 且末县| 铁岭市| 临朐县| 剑阁县| 商洛市| 楚雄市| 固始县| 崇州市| 漳州市| 聂荣县| 保德县| 威宁| 墨玉县| 泰顺县| 新平| 土默特左旗| 民权县| 双柏县| 叙永县| 南江县| 德阳市| 白玉县| 吉林市| 华坪县| 东丰县| 延寿县| 淳化县| 桦甸市| 宣恩县|