當前位置:首頁 » 編程語言 » sql統計數量表改成橫表
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql統計數量表改成橫表

發布時間: 2022-12-22 16:59:03

sql 裡面怎麼把豎表變成橫表

select 姓名,sum(case when 科目='數學' then 分數 end) as 數學,sum(case when 科目='語文' then 分數 end) as 語文,sum(case when 科目='英語' then 分數 end) as 英語 from 表名
group by 姓名

㈡ SQL中內容都為字元型的豎版表轉橫版,如何實現

Word默認為一節,而一節的頁面格式是相同的,若想把一個WORD文件中的每一頁隨意設置成橫版或是豎版,必須將其設置為單獨一節,這樣就可以單獨設置了。
假設有一個10頁文檔,想讓其中第3頁為橫板,設置步驟:
1、將游標放在第3的首位置,單擊頁面布局---->分隔符---->分節符---->下一頁,如圖所示;
2、將游標放在第3頁的尾部,重復上面的操作上,使第3頁成為單獨一節;
3、游標放在第3頁,單擊頁面布局---->紙張方向---->橫向即可,如圖所示。

㈢ 用 sql語句將數列的表轉成橫列的表,當張三擁有兩個語文成績時,怎麼求和


你搞得太復雜了,用交叉表查詢就行了

㈣ sql server 縱表轉橫表

如果單純是你如上數據的話這樣:

創建表:

createtablet
(idint,
orderidint,
prfnoint,
prfidvarchar(10));


insertintotvalues(16385,171202,1,'FB065_1');
insertintotvalues(16385,171202,2,'FB065_06');
insertintotvalues(16385,171202,3,'FB065_06');
insertintotvalues(16385,171202,4,'FB065_06');

insertintotvalues(16386,171202,1,'FB065_1');
insertintotvalues(16386,171202,2,'FB065_06');
insertintotvalues(16386,171202,3,'FB065_06');
insertintotvalues(16386,171202,4,'FB065_06');

執行:

selectid,orderid,
max(casewhenprfno=1thenprfidend)prfid1,
max(casewhenprfno=2thenprfidend)prfid2,
max(casewhenprfno=3thenprfidend)prfid3,
max(casewhenprfno=4thenprfidend)prfid4
fromtgroupbyid,orderid

結果:

如果需求復雜的話,就要改別的方法了。

㈤ SQL豎表轉換為橫表,跪求大俠幫忙!

建表及插入數據

createtablet(姓名varchar(10),課程varchar(10),分數int)
insertintotvalues('張三','語文',74)
insertintotvalues('張三','數學',83)
insertintotvalues('張三','物理',93)
insertintotvalues('李四','語文',74)
insertintotvalues('李四','數學',84)
insertintotvalues('李四','物理',94)

執行語句

select姓名,
'語文'課程1,sum(casewhen課程='語文'then分數else0end)成績1,
'物理'課程2,sum(casewhen課程='物理'then分數else0end)成績2,
'數學'課程3,sum(casewhen課程='數學'then分數else0end)成績3
fromt
groupby姓名

運行結果

㈥ 如何通過sql將表中豎向數據轉換成橫向數據

行列轉換等經典SQL語句

參考資料:http://blog.csdn.net/kiki113/archive/2009/04/24/4105929.aspx

1.--行列轉換

原表: 姓名 科目 成績
張三 語文 80
張三 數學 90
張三 物理 85
李四 語文 85
李四 物理 82
李四 英語 90
李四 政治 70
王五 英語 90

轉換後的表: 姓名 數學 物理 英語 語文 政治
李四 0 82 90 85 70
王五 0 0 90 0 0
張三 90 85 0 80 0

實例:
create table cj --創建表cj
(
ID Int IDENTITY (1,1) not null, --創建列ID,並且每次新增一條記錄就會加1
Name Varchar(50),
Subject Varchar(50),
Result Int,
primary key (ID) --定義ID為表cj的主鍵
);
--Truncate table cj
--Select * from cj
Insert into cj
Select '張三','語文',80 union all
Select '張三','數學',90 union all
Select '張三','物理',85 union all
Select '李四','語文',85 union all
Select '李四','物理',82 union all
Select '李四','英語',90 union all
Select '李四','政治',70 union all
Select '王五','英語',90
--行列轉換
Declare @sql varchar(8000)
Set @sql = 'Select Name as 姓名'
Select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result else 0 end) ['+Subject+']'
from (select distinct Subject from cj) as cj --把所有唯一的科目的名稱都列舉出來
Select @sql = @sql+' from cj group by name'
Exec (@sql)

2. 行列轉換--合並
原表: 班級 學號
1 1
1 2
1 3
2 1
2 2
3 1
轉換後的表: 班級 學號
1 1,2,3
2 1,2
3 1

實例:
Create table ClassNo --創建表ClassNo
(
ID Int IDENTITY(1,1) not null, --創建列ID,並且每次新增一條記錄就會加1
Class Varchar(50), --班級列
Number Varchar(50), --學號列
Primary Key(ID) --定義ID為表ClassNo的主鍵
);
--Truncate Table ClassNo
--Select * from ClassNo
Insert Into ClassNo
Select 1,1 Union all
Select 1,2 Union all
Select 1,3 Union all
Select 2,1 Union all
Select 2,2 Union all
Select 3,1

創建一個合並的函數
--Drop Function KFReturn
Create Function KFReturn(@Class Varchar(50))
Returns Varchar(8000)
as
Begin
Declare @str Varchar(8000)
Set @str = ''
Select @str = @str + cast(Number as Varchar(50)) + ',' from ClassNo Where Class = @Class
Set @str = SubString(@str,1,len(@str)-1)
Return(@str)
End

--調用自定義函數得到結果
Select Distinct Class,dbo.KFReturn(Class) From ClassNo

3:列轉行
--Drop Table ColumnToRow
Create table ColumnToRow
(
ID Int IDENTITY(1,1) not null, --創建列ID,並且每次新增一條記錄就會加1
a int,
b int,
c int,
d int,
e int,
f int,
g int,
h int,
Primary Key(ID) --定義ID為表ColumnToRow的主鍵
);
--Truncate Table ColumnToRow
--Select * from ColumnToRow
Insert Into ColumnToRow
Select 15,9,1,0,1,2,4,2 Union all
Select 22,34,44,5,6,7,8,7 Union all
Select 33,44,55,66,77,88,99,12

Declare @sql Varchar(8000)
Set @sql = ''
Select @sql = @sql + rtrim(name) + ' from ColumnToRow union all Select ' from SysColumns Where id = object_id('ColumnToRow')
Set @sql = SubString(@sql,1,len(@sql)-70)
--70的長度就是這個字元串'from ColumnToRow union all Select ID from ColumnToRow union all Select ',因為它會把ID這一列的值也算進去,所以要把它截掉
Exec ('Select ' + @sql + ' from ColumnToRow')

㈦ sql如何自動實現更新,豎表變橫表,是要用觸發器還是別的方法實現,具體代碼如何寫

----------這個問題要創建視圖得到你想要的結果需要做一些處理
----------我這里用oracle為例,從建表開始
----創建測試表
droptabletest_1;
createtabletest_1
(gidvarchar(10),
gdescvarchar(100),
ac_datedate,
sale_moneydecimal(18,2),
sale_numdecimal(18,2)
);
-----插入測試數據
insertintotest_1
select'1001','A',to_date('2018/3/1','YYYY/MM/DD'),1000,500fromal
unionall
select'1002','B',to_date('2018/3/1','YYYY/MM/DD'),2000,600fromal
unionall
select'1003','C',to_date('2018/3/1','YYYY/MM/DD'),3000,700fromal
unionall
select'1001','A',to_date('2018/3/2','YYYY/MM/DD'),4000,800fromal
unionall
select'1002','B',to_date('2018/3/2','YYYY/MM/DD'),5000,900fromal
unionall
select'1003','C',to_date('2018/3/2','YYYY/MM/DD'),6000,1000fromal
unionall
select'1001','A',to_date('2018/3/3','YYYY/MM/DD'),7000,1100fromal
unionall
select'1002','B',to_date('2018/3/3','YYYY/MM/DD'),8000,1200fromal
unionall
select'1003','C',to_date('2018/3/3','YYYY/MM/DD'),9000,1300fromal
;
----創建視圖
createviewv_test
as
select*from(
select
gid商品編號
,gdesc商品名稱
,cast(SUM(casewhenac_date=to_date('2018/3/1','YYYY/MM/DD')
thensale_money
else0
end)asvarchar(20))"2018/3/1金額"
,cast(SUM(casewhenac_date=to_date('2018/3/2','YYYY/MM/DD')thensale_money
else0
end)asvarchar(20))"2018/3/2金額"
,cast(SUM(casewhenac_date=to_date('2018/3/3','YYYY/MM/DD')thensale_money
else0
end)asvarchar(20))"2018/3/3金額"
,cast(SUM(casewhenac_date=to_date('2018/3/1','YYYY/MM/DD')thensale_num
else0
end)asvarchar(20))"2018/3/1數量"
,cast(SUM(casewhenac_date=to_date('2018/3/2','YYYY/MM/DD')thensale_num
else0
end)asvarchar(20))"2018/3/2數量"
,cast(SUM(casewhenac_date=to_date('2018/3/3','YYYY/MM/DD')thensale_num
else0
end)asvarchar(20))"2018/3/3數量"
fromtest_1
groupbygid,gdesc
UNIONALL
SELECT''商品編號
,''商品名稱
,'銷售額'"2018/3/1金額"
,'銷售額'"2018/3/2金額"
,'銷售額'"2018/3/3金額"
,'銷售量'"2018/3/1數量"
,'銷售量'"2018/3/2數量"
,'銷售量'"2018/3/2數量"
fromal
)A
orderby商品編號;
-----查詢該視圖信息,看看是否是想要的結果
select*fromv_test;

㈧ 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
[部門],
[費用項目],
sum(casewhensubstring([日期],5,2)='01'then[金額]else0end)as[1月總],
sum(casewhensubstring([日期],5,2)='02'then[金額]else0end)as[2月總],
sum(casewhensubstring([日期],5,2)='03'then[金額]else0end)as[3月總],
sum(casewhensubstring([日期],5,2)='04'then[金額]else0end)as[4月總],
sum(casewhensubstring([日期],5,2)='05'then[金額]else0end)as[5月總],
sum(casewhensubstring([日期],5,2)='06'then[金額]else0end)as[6月總],
sum(casewhensubstring([日期],5,2)='07'then[金額]else0end)as[7月總],
sum(casewhensubstring([日期],5,2)='08'then[金額]else0end)as[8月總],
sum(casewhensubstring([日期],5,2)='09'then[金額]else0end)as[9月總],
sum(casewhensubstring([日期],5,2)='10'then[金額]else0end)as[10月總],
sum(casewhensubstring([日期],5,2)='11'then[金額]else0end)as[11月總],
sum(casewhensubstring([日期],5,2)='12'then[金額]else0end)as[12月總]
fromtableA
groupby[部門],[費用項目]

㈩ sql豎表數據批量插入到橫表中 注意是要插入到表中,不單單是查詢出來

declare @idx int,@colName varchar(50),@tableID int,@sql varhcar(2000)

select @tableID=id from sysobjects where name='橫表名'
set @idx=1
set @colName='Marks'+convert(varchar,@idx)
while(if exists(select * from sysocolumns where id=@tableID and name=@colName))
begin
set sql='insert into 縱表 select stuno,stuname,『+@colName+』from 橫表'
exec(@sql)
set @idx=@idx+1
set @colName='Marks'+convert(varchar,@idx)
end
沒有調試,直觀的基本上就是這個寫法,復雜點的你可以單獨再建個要需讀取的列名表,循環取列名拼SQL再執行。
或者再寫的復雜點,循環用union拼接select的部分
以上是針對類似問題的通用方案,適合列很多的情況。

如果僅限於上邊的例 子不做任何擴展,最死的寫法就是
insert into 縱表
from select * from(select stuno,stuname,marks1 from 橫表
union select stuno,stuname,marks2 from 橫表
union select stuno,stuname,marks3 from 橫表
)t

當然如果直接查詢生成表,也可以用select ...into的寫法