一个用来统计相同姓名人数的SQl语句

sql语句查询 表结构是这样: ID 姓名 性别 1 张三 男 2 王四 男 3 丽丽 女 4
张三 男 5 赵柳 男 6 高洁 男 7 王四 女 8 高洁 女 9 张三 女
怎么能用一条SQL语句查询出如下的结果 姓名 人员个数 男人数 女人数 包含ID
张三 3 2 1 1,4,9 王四 2 1 1 2,7 丽丽 1 0 1 3 高洁 2 1 1 6,8 赵柳 1 1
0 5 复制代码 代码如下: SELECT * FROM
(SELECT DISTINCT Name,Count(ID) as 人員個數, sum(case when Sex=’男’ then
1 else 0 end) as 男人數, sum(case when Sex=’女’ then 1 else 0 end) as
女人數 FROM Test group by Name) A OUTER APPLY( SELECT [包含ID]=
STUFF(REPLACE(REPLACE( ( SELECT ID FROM Test N WHERE Name = A.Name FOR
XML AUTO ), ‘N ID=”‘, ‘,’), ‘”/’, ”), 1, 1, ”) )N

/* 1 */
declare @sql varchar(8000)
set @sql = ‘select ”总量” as [时间] ‘
select @sql = @sql + ‘ , sum(case 时间 when ‘ + rtrim(时间) + ‘ then 总量 end) [‘ + rtrim(时间) + ‘]’
from (
select DATEPART(hh, CreateTime) 时间,count(*) 总量 from Business_Login 
WHERE  CreateTime > ( select CONVERT(varchar, getdate(), 111 ))
GROUP BY  DATEPART(hh, CreateTime)

情景一: 表中数据 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

)t ORDER BY 时间

set @sql = @sql + ‘ from (select DATEPART(hh, CreateTime) 时间,count(*) 总量   from Business_Login 
WHERE  CreateTime > ( select CONVERT(varchar, getdate(), 111 ))
 group by DATEPART(hh, CreateTime) 
)  t ‘
exec(@sql) 

/* 2 */
select DATEPART(hh, CreateTime) 时间,count(*) 总量 into #tb  from Business_Login 
WHERE  CreateTime > ( select CONVERT(varchar, getdate(), 111 ))
GROUP BY  DATEPART(hh, CreateTime)

declare @sql varchar(8000)
set @sql = ‘select ”总量” as [时间] ‘
select @sql = @sql + ‘ , sum(case 时间 when ‘ + rtrim(时间) + ‘ then 总量 end) [‘ + rtrim(时间) + ‘]’
from #tb ORDER BY 时间

set @sql = @sql + ‘ from #tb  t ‘
exec(@sql) 
DROP TABLE #tb