一.通過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 ...