關於查詢同張表多個結果合成一張表

2021-06-10 22:40:28 字數 2284 閱讀 3869

建立學生表,記錄學號、出生日期。

create table stu

id int ,

birthday datetime

根據傳入的年份,查詢每個月出生的人數。

思路:根據傳入的年份,得到每個月出生的總人數,—為12個結果。

將12個結果組成一張臨時表,查詢出資料並刪除該錶。

儲存過程:

create proc [dbo].[p_getcountbyyear]

( @year int)as

begin

create table #tempcount

( [monthname] int primary key

,yearname nvarchar(20)

) insert into #tempcount([monthname],yearname)

select 1,convert(nvarchar(4),@year)

union

select 2,convert(nvarchar(4),@year)

union

select 3,convert(nvarchar(4),@year)

union

select 4,convert(nvarchar(4),@year)

union

select 5,convert(nvarchar(4),@year)

union

select 6,convert(nvarchar(4),@year)

union

select 7,convert(nvarchar(4),@year)

union

select 8,convert(nvarchar(4),@year)

union

select 9,convert(nvarchar(4),@year)

union

select 10,convert(nvarchar(4),@year)

union

select 11,convert(nvarchar(4),@year)

union

select 12,convert(nvarchar(4),@year)

select #tempcount.yearname,#tempcount.[monthname],isnull(nnt.createdcount,0) as createdcount from #tempcount

left join

( select count(id) as createdcount,createdmonth,createdyear from

( select id,datepart(year,birthday) as createdyear ,datepart(month,birthday) as createdmonth from stu

where datepart(year,birthday)=@year

) nt

group by createdyear,createdmonth

) nnt on nnt.createdyear = #tempcount.yearname and nnt.createdmonth = #tempcount.[monthname]

order by [monthname]

drop table #tempcount

end

解析:1.@year為輸入的引數變數

2.#tempcount為建立的臨時表

3.insert into .t1.select ..t2..語句為:將後乙個表的資料複製到另一張表t1上

4.datepart(year,birthday)函式為,擷取日期的某個部分"年"、"月"、"日"

如:datepart(year,『2012-02-22』)為2012

datepart(month,『2012-02-22』)為2

datepart(day,『2012-02-22』)為22

5. left join 為左連線

如:a left join b on a.id = b.id

結果仍為a的結構,其中b為包含的資料填充為'null'

6.isnull()為替換函式

如:isnull(nnt.createdcount,0)為若列"nnt.createdcount"的值為null,則用0代替

7.union連線符

儲存過程含義insert into select join == insert into select 另一條語句insert into select

將一張表的查詢結果插入到另一張表

select into 和 insert into select 兩種表複製語句 2select into desttbl from srctbl34 insert into desttbl fld1,fld2 select fld1,5 from srctbl56 以上兩句都是將 srctbl 的...

mysql 一張表多個TimeStamp設定的方法

quote timestamp設定預設值是default current timestamp timestamp設定隨著表變化而自動更新是on update current timestamp 接下來為您詳細介紹 timestamp設定預設值是default current timestamp ti...

Oracle一張表的多個字段更新到另一張表中去

假設表a中有多個字段 province city 需要從b表獲取 兩張表的mobile一樣 總結了幾種寫法。一 update a set a.province select province from b where b.mobile a.mobile update a set a.city sel...