当前位置:首页 » 编程语言 » sql字段横向统计
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql字段横向统计

发布时间: 2022-12-26 20:07:03

sql中的统计加横表转纵表

根本没涉及横纵。
select a.*,b.军人人数,c.武警人数 from
(select 所在位置,count(*) as 警察人数 from 表 where 职务='警察' group by 位置) as a left jion
(select 所在位置,count(*) as 军人人数 from 表 where 职务='军人' group by 位置) as b
on a.所在位置=b.所在位置 left jion
(select 所在位置,count(*) as 武警人数 from 表 where 职务='武警' group by 位置) as c on a.所在位置=c.所在位置

⑵ access数据库SQL中如何横向使用count函数,例如 我要统计一列出现 K 的次数。

不能横向统计,如果必须要统计,就需要写存储过程了。

⑶ 超难的Sql查询(纵向转横向+分组统计)

使用自定议函数实现:

先建立一个取某列值的函数(getcol):输入商品编号,返回该编号对应的销售单号。

再执行这个语句即可:
select 商品编号,销售单号=dbo.getcol(商品编号) from
(select distinct 商品编号 from 表名) a

表结构:
CREATE TABLE 表名(商品编号 int,销售单号 varchar(20))

函数脚本(如果表结构一致,直接复制到查询分析器即可执行):
alter FUNCTION getcol
(@spbh int)
RETURNS varchar(8000)
AS
BEGIN
declare @f1 varchar(100),@result varchar(1000),@deli char(1)
set @deli=','
set @result=''

DECLARE ddcursor CURSOR for select 销售单号 from 表名 where 商品编号=@spbh
open ddcursor
fetch next from ddcursor into @f1
while @@fetch_status!=-1
begin
set @result=@result+@deli+isnull(@f1,'')
fetch next from ddcursor into @f1
end
close ddcursor
deallocate ddcursor
set @result=substring(@result,2,1000)

return (@result)
end

GO
注:想了好久,没有找到更加通用的函数和方法,只能用这个方法,当然,也可以用存储过程实现,但那样您就不能用简单的查询语句来完成。
而使用函数,在前台只调用简单查询语句即可完成。

⑷ sql如何进行多个字段的统计个数

一种查询SQL如下, 利用union获得b和c各自的统计结果, 然后再一次统计整合到最终结果:

selectsum(d.b_cnt)+sum(d.c_cnt)astotal_cnt,sum(d.b_cnt)asb_cnt,casewhensum(d.b_cnt)=0then''elsed.valendasb_label,sum(d.c_cnt)asc_cnt,casewhensum(d.c_cnt)=0then''elsed.valendasc_labelfrom(selectbasval,count(b)asb_cnt,0asc_,0,count(c)asc_cntfromAgroupbyc)dgroupbyd.val

SQLSerer上的测试结果(栏位次序有变化),

total_cnt为总数, b_label为b栏值, b_cnt为b栏个数, c_labe为c栏值, c_cnt为c栏个数.

这个结果跟字段是否为整型无关, 它是统计记录出现的次数.

⑸ oracle中超难的sql,横向统计,需要大侠们帮帮,让所有疑问的人都能得到帮助,回答请给出例子

主要目的动态拼出如下sql
select tb.time,
max(case
when tb.id = 1 then
user1
end) as a001,
max(case
when tb.id = 2 then
user1
end) as a002,
max(case
when tb.id = 3 then
user1
end) as a003
from tb
group by tb.time;

--以下为测试部分
create table ta (id int,name varchar2(20));
create table tb (id1 int,time varchar2(20),user1 varchar2(20),id int);
insert into ta values(1,'a001');
insert into ta values(2,'a002');
insert into ta values(3,'a003');
insert into tb values(1,'2011-01-01','u001',1);
insert into tb values(2,'2011-01-01','u002',2);
insert into tb values(3,'2011-01-01','u003',3);
insert into tb values(4,'2011-01-02','u004',1);
insert into tb values(5,'2011-01-02','u001',2);
insert into tb values(6,'2011-01-02','u001',3);

create or replace procere test_p
as
sql_str varchar2(10000);
begin
for rec in ( select * from ta ) loop
sql_str := sql_str||'max(case when tb.id = '||rec.id||' then user1 end) as '|| rec.name ||',' ;
end loop;
sql_str := 'select tb.time, '||rtrim(sql_str,',')||' from tb group by tb.time';
--dbms_output.put_line(sql_str);
execute immediate sql_str;
end;

最后执行test_p 就能达到你想要的效果了。

⑹ SQL中如何在一个表中对一个字段进行统计

额,问题不太清楚。一般统计总的条目数是count(*),还有求平均的avg(),最大值max(),最小值min()等等。
举个例子:
select count(*) from table where 某=某
结果显示的是符合某=某条件的条数。

⑺ SQL 单表查询按字段分类统计如何横排显示

嵌入写:即简单,又易懂
select name ,
case type when '白班' then '1' else '' end as dayjob ,
case type when '夜班' then '1' else '' end as nightjob
from work
把上面这句做为整体,嵌入到下面。
select a.name ,count(a.dayjob),count(a.nightjob) from
(
select name ,
case type when '白班' then '1' else '' end as dayjob ,
case type when '夜班' then '1' else '' end as nightjob
from work
) as a group by a.name

括号里面就是一个子查询,这样就可以达到你的要求。

⑻ sql查询横排

静态的,假设统计类别就只有:伙食费、培训费两种
select 姓名,
max(case 统计类别 when '培训费' then moneys else 0 end) 培训费,
max(case 统计类别 when '伙食费' then moneys else 0 end) 伙食费
from
(
select 姓名,sum(金额) moneys, 统计类别
from 表1
group by 姓名,统计类别
) tb
group by 姓名
----
动态的,统计类别不固定
declare @sql varchar(8000)
set @sql = 'select 姓名'
select @sql = @sql + ' , max(case 统计类别 when ''' + 统计类别 + ''' then moneys else 0 end) [' + 统计类别 + ']' from (select distinct 统计类别 from 表1) as a
set @sql = @sql + ' from (select 姓名,sum(金额) moneys, 统计类别 from 表1 group by 姓名,统计类别) group by 姓名'
exec(@sql)

⑼ sql中 怎么将其中的某个字段横着显示出来

这个属于行列转换,给个例子你自己看一下
假设有张学生成绩表(tb)如下:
Name Subject Result
张三 语文74
张三 数学83
张三 物理93
李四 语文74
李四 数学84
李四 物理94
*/
-------------------------------------------------------------------------
/*
想变成
姓名 语文 数学 物理
---------- ----------- ----------- -----------
李四 74 84 94
张三 74 83 93
*/
create table tb
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)
insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
go
--静态SQL,指subject只有语文、数学、物理这三门课程。
select name 姓名,
max(case subject when '语文' then result else 0 end) 语文,
max(case subject when '数学' then result else 0 end) 数学,
max(case subject when '物理' then result else 0 end) 物理
from tb
group by name

⑽ sql怎么把一个字段结果横向展示

PIVOT 函数就行。
不过有限制,首先只能转数值字段,如果要转中文需要做对照
其次是每次只能转1列