SQL語句練習

2021-09-11 01:35:26 字數 1400 閱讀 5510

一.通過sql實現根據分組合併指定列內容的查詢 

問題:

最近在做乙個專案的時候,遇到這樣乙個要求,模擬要求如下:  

id  sname

1 張三

1 李四

2 劉六

2 王五

要的結果是

id name

1 張三,李四

2 劉六,王五

即按id組查詢,並將相同的id對應sname內容通過逗號合併

解決思路:

通過傳遞不同的id給函式,查詢出組合的sname並返回。

--建立測試表

if not exists(select * from sysobjects where id=object_id(n'studentsinfo') and objectproperty(id,n'isusertable')=1)

create table studentsinfo

( id int,

sname nvarchar(20))go

--新增測試資料

insert into studentsinfo values (1,'張三')

insert into studentsinfo values (1,'李四')

insert into studentsinfo values (2,'劉六')

insert into studentsinfo values (2,'王五')

go--建立函式

if exists(select * from sysobjects where id=object_id(n'getstudentsinfonamesbyid') and objectproperty(id,n'isscalarfunction')=1)

drop function getstudentsinfonamesbyid

gocreate function getstudentsinfonamesbyid(@id int)

returns nvarchar(4000)

asbegin

declare @snames nvarchar(4000)

set @snames = ''

select @snames = @snames+','+sname from studentsinfo where id = @id

return stuff(@snames,1,1,'')

endgo

--查詢

select id,dbo.getstudentsinfonamesbyid(id) as snames from studentsinfo group by id

SQL語句練習

建立一張表,記錄 呼叫員的工作流水,記錄呼叫員編號,對方號碼,通話開始時間,結束時間。建表,插資料等都自己寫出sql 要求 輸出所有資料中通話時間最長的5條記錄。輸出所有資料中撥打長途號碼 對方號碼以0開頭 的總時長 輸出本月通話時長最多的前三個呼叫員的編號 輸出本月撥打 次數最多的前三個呼叫員的編...

SQL 語句練習

mysql select from persons limit 5 oracle select from persons where rownum 5 select from persons where name like l select from persons where name not l...

SQL語句練習

1 把兩張 的資料抽取出來放到另外一張 中 1 pt表 role id int pt int 2 season score表 role id int season score int 3 player表 role id int pt int season score int count int 4 ...