一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - sql 分組查詢問題

sql 分組查詢問題

2019-11-20 15:36SQL教程網 Sql Server

sql 分組查詢問題,需要的朋友可以參考下。

情景一: 
表中數據 
name score 
aaa 11 
aaa 19 
bbb 12 
bbb 18 
ccc 19 
ddd 21 
期望查詢結果如下 
name score 
aaa 30 
bbb 30 
ccc 19 
ddd 21 

復制代碼代碼如下:


---檢查表是否存在 
if exists(select * from sysobjects where name='testSum') 
drop table testSum 
go 
---創建表 
create table testSum 

tid int primary key identity(1,1), 
tname varchar(30) null, 
tscor int null 

go 
insert into testSum (tname,tscor) 
select 'aaa',11 
union all 
select 'aaa',19 
union all 
select 'bbb',12 
union all 
select 'bbb',18 
union all 
select 'ccc',19 
union all 
select 'ddd',21 
---查詢語句 
select tname ,sum(tscor) from testSum group by tname 
---只查詢tscor總和為30的 
select tname ,sum(tscor) from testSum group by tname having sum(tscor)=30 


情景二: 
姓名 科目 分數 
張三 語文 30 
張三 數學 50 
張三 英語 70 
李四 語文 50 
李四 數學 80 
李四 英語 90 

期望查詢結果: 

姓名 語文 數學 英語 
張三 30 50 70 
李四 50 80 90 

復制代碼代碼如下:


---檢查表是否存在 
if exists(select * from sysobjects where name='testScore') 
drop table testScore 
go 
---創建表 
create table testScore 

tid int primary key identity(1,1), 
tname varchar(30) null, 
ttype varchar(10) null, 
tscor int null 

go 
---插入數據 
insert into testScore values ('張三','語文',90) 
insert into testScore values ('張三','數學',20) 
insert into testScore values ('張三','英語',50) 
insert into testScore values ('李四','語文',30) 
insert into testScore values ('李四','數學',47) 
insert into testScore values ('李四','英語',78) 
---查詢 
select tname as '姓名' , 
max(case ttype when '語文' then tscor else 0 end) '語文', 
max(case ttype when '數學' then tscor else 0 end) '數學', 
max(case ttype when '英語' then tscor else 0 end) '英語' 
from testScore 
group by tname 


情景三: 
表:table1 
字段:id , name 
內容: 
---------------- 
1,aaa 
1,bbb 
2,ccc 
2,ddd 
3,eee 
3,fff 
-------------- 
希望結果: 
--------------------- 
1 aaa bbb [aaa bbb之間半角空格區分,以下類似] 
2 ccc ddd 
3 eee fff 

復制代碼代碼如下:


f exists(select * from sysobjects where name='test1') 
drop table test1 
go 
create table test1 

tid int primary key identity(1,1), 
tnum int null, 
tname varchar(30) null 

go 
insert into test1 values (1,'aa') 
insert into test1 values (1,'bb') 
insert into test1 values (2,'cc') 
insert into test1 values (2,'dd') 
insert into test1 values (3,'ee') 
insert into test1 values (3,'ff') 
SELECT * FROM ( SELECT DISTINCT tnum FROM test1 
)A 
OUTER APPLY( 
SELECT tname= STUFF(REPLACE(REPLACE( 

SELECT tname FROM test1 N 
WHERE tnum = A.tnum 
FOR XML AUTO 
), '<N tname="', ' '), '"/>', ''), 1, 1, '') 
)N 


情景四: 
我需要將表tb中的數據select出來,得到下面第二個表的數據,如何寫select語句? 
表tb 
id a flag class 
----------+---------+--------+--------- 
1 2 1 A 
2 2 1 A 
3 4 1 A 
4 5 2 A 
5 3 2 A 
6 4 1 A 
7 2 1 A 
8 3 2 A 
9 4 2 A 
10 5 3 A 
11 5 1 B 
12 2 1 B 
13 3 1 B 
14 4 1 B 
15 2 3 B 
16 7 3 B 
17 3 2 B 
18 4 1 B 
19 5 1 B 
20 2 2 B 
21 1 1 B 
22 1 1 C 
23 2 3 C 
24 6 3 C 
25 3 2 C 
... 
需要選取出如下的表,按class列進行分組,a1,a2,a3字段分別為flag=1、2、3時tb表中a字段的求和 
選取后 
a1 a2 a3 class 
-----------+------------+-----------------+-------------- 
sum(a) sum(a) sum(a) A 
sum(a) sum(a) sum(a) B 
sum(a) sum(a) sum(a) C 
sum(a) sum(a) sum(a) D 
sum(a) sum(a) sum(a) E 
sum(a) sum(a) sum(a) F 
sum(a) sum(a) sum(a) G 

復制代碼代碼如下:


---檢查表是否存在 
if exists(select * from sysobjects where name='testFlag') 
drop table testFlag 
go 
---創建表 
create table testFlag 

tid int primary key identity(1,1), 
tname varchar(30) null, 
tflag int null, 
tscor int null 

go 
---插入數據 
insert into testFlag (tname,tflag,tscor) 
select 'aaa',1,11 
union all 
select 'aaa',2,19 
union all 
select 'aaa',3,12 
union all 
select 'aaa',1,18 
union all 
select 'aaa',2,19 
union all 
select 'aaa',3,21 
union all 
select 'bbb',1,11 
union all 
select 'bbb',2,19 
union all 
select 'bbb',3,12 
union all 
select 'bbb',1,18 
union all 
select 'bbb',2,19 
union all 
select 'bbb',3,21 
----查詢語句 
select distinct tname,(select sum(tscor) from testFlag where tflag=1 and testFlag.tname = t.tname) as 'flag1',(select sum(tscor) from testFlag where tflag=2 and testFlag.tname = t.tname) as 'flag2',(select sum(tscor) from testFlag where tflag=3 and testFlag.tname = t.tname) as 'flag3' from testFlag t group by tname,tflag 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99久久国产综合精品1尤物 | 日韩久久中文字幕 | 欧美精品综合一区二区三区 | 国产色司机在线视频免费观看 | 91高清在线视频 | 国产一区二区免费在线 | 国产日韩欧美精品在线 | 高清男的插曲女的 欢迎你老狼 | 大陆国语自产精品视频在 | 亚洲无线一二三四区 | 人人人人看人人人做人人 | 三级全黄的视频 | 丝瓜秋葵番茄绿巨人在线观看 | 亚洲欧美色综合图小说 | 亚洲精品中文字幕在线 | 逼逼爱 | 插入肥臀| 国产精品久久久久久久免费大片 | 无码一区国产欧美在线资源 | 久久国产精品高清一区二区三区 | 精品国产品香蕉在线观看75 | 成人国产精品视频 | 天莱男模gary| 日韩视频一区二区 | 古代双性美人被老糟蹋 | www.4虎影院| 国产精品午夜国产小视频 | 免费在线观看网址入口 | 日韩欧美亚洲一区精选 | 国产精品久久国产精品99 gif | 99免费精品 | 国产实拍会所女技师在线 | 亚洲欧美日韩成人一区在线 | 91精品免费观看老司机 | 婷婷日日夜夜 | 女子张腿让男人桶免费 | 波多野结衣在线中文字幕 | 天天做天天爰夜夜爽 | 成人福利网站含羞草 | 亚洲成av人在线视 | 久久爽狠狠添AV激情五月 |