當前位置:首頁 » 編程語言 » 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列