當前位置:首頁 » 編程語言 » sql將豎列變為橫列
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql將豎列變為橫列

發布時間: 2022-06-05 21:03:38

sql Server 豎向結果轉換為橫向

SELECT 姓名
,'數學'=MAX(CASE 課程 WHEN '數學' THEN 分數 ELSE 0 END)
,'語文'=MAX(CASE 課程 WHEN '語文' THEN 分數 ELSE 0 END)
,'英語'=MAX(CASE 課程 WHEN '英語' THEN 分數 ELSE 0 END)
FROM TB
GROUP BY 姓名

--或者
SELECT 姓名,
,'數學'=SUM(CASE 課程 WHEN '數學' THEN 分數 ELSE 0 END)
,'語文'=SUM(CASE 課程 WHEN '語文' THEN 分數 ELSE 0 END)
,'英語'=SUM(CASE 課程 WHEN '英語' THEN 分數 ELSE 0 END)
FROM TB
GROUP BY 姓名

⑵ SQL裡面如何將豎著的列橫著顯示

一般這樣的情況
如果是我做的話
就預先建立一個表
設置time1
time1
time3……
然後
分別逐次以
no
和日期為
time
分組
;行標題
time
為列標題

值(求和)……對先前建立的表進行追加……
SQL
我不太熟悉
在access

完全可以做的……
還有
如果
你能夠
把你的時間
劃分成不同的時間段
而對應到固定的時間段中的話,完全
直接可以使用
一個交叉查詢就可以了……
但願
這個提示
對你有所幫助……

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

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

⑷ SQL 豎列 轉換橫列的問題

使用CASE來處理。

select 編號, sum( 第一季度第一次施肥量) 第一季度第一次施肥量, sum( 第一季度第二次施肥量) 第一季度第二次施肥量, sum( 第二季度第一次施肥量) 第二季度第一次施肥量
from
(
select 編號
case when 季度=1 and 施肥次數=1 then 施肥量 else null end 第一季度第一次施肥量,
case when 季度=1 and 施肥次數=2 then 施肥量 else null end 第一季度第二次施肥量,
case when 季度=2 and 施肥次數=1 then 施肥量 else null end 第二季度第一次施肥量
from 表
) a
group by a.編號

⑸ sql中把查詢結果從豎列轉為橫向

select a as A,max(case when b='a' then c end) as a,max(case when b='b' then c end) as b,max(case when b='c' then c end) as c,max(case when b='d' then c end) as d from a

⑹ oracle中sql語句中的分組,如何將豎列變橫列

create or replace type list_agg as object
(
total varchar2(4000),
static function ODCIAggregateInitialize(sctx IN OUT list_agg)
return number,
member function ODCIAggregateIterate(self IN OUT list_agg,
value IN varchar2) return number,
member function ODCIAggregateTerminate(self IN list_agg,
returnValue OUT varchar2,
flags IN number)
return number,
member function ODCIAggregateMerge(self IN OUT list_agg,
ctx2 IN list_agg) return number
);
create or replace type body list_agg is
static function ODCIAggregateInitialize(sctx IN OUT list_agg) return number is
begin
sctx := list_agg(null);
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT list_agg,
value IN varchar2) return number is
begin
self.total := self.total || value;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN list_agg,
returnValue OUT varchar2,
flags IN number) return number is
begin
returnValue := substr(self.total, 2);
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT list_agg,
ctx2 IN list_agg) return number is
begin
self.total := self.total || ctx2.total;
return ODCIConst.Success;
end;
end;
CREATE OR REPLACE FUNCTION ColumnToRow(input varchar2 )
RETURN varchar2
PARALLEL_ENABLE AGGREGATE USING list_agg;

select ColumnToRow(','||Tname) from tab where rownum<10;

⑺ 如何通過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里邊怎麼豎列變橫列,

這個最好在一個存儲過程中完成。因為每個「分組值」的多少不同。比如PF66152210L有兩個,有些就有三個,誰知道最多有多少個,以前寫過一個,是用過程完成的。

  1. 加特徵碼

    用row_number() over 並將這個欄位命名為rows

    按照f1分組,然後,這樣能在後面加上1,2,3,.....,不用排序,分組就行

  2. 利用case when

    在剛才那個查詢結果的外麵包一層,利用(case when rows=1 then f2 end)h2,(case when rows=2 then f2 end)h3,....... group by f1

    你試試吧,應該可以。

  3. 如果,f2在一行里邊,中間用,隔開也可以
    那麼就用 wmsys.wm_concat就行了。(不過我說的是oracle庫啊)

⑼ SQL 語句問題 縱列如何轉化成橫列

例子如下:
create table tb(姓名 varchar(10) , 課程 varchar(10) , 分數 int)
Insert tb
Select '張三','語文',60 union all
Select '張三','數學',70 union all
Select '張三','英語',80 union all
Select '張三','物理',90 union all
Select '李四','語文',65 union all
Select '李四','數學',75 union all
Select '李四','英語',85 union all
Select '李四','物理',95
go

declare @sql varchar(8000)
set @sql = ''
select @sql = @sql+[課程]+'=sum(case when [課程]='''+[課程]+''' then [分數] else 0 end),' from (SELECT DISTINCT [課程] FROM TB) A
--print @sql
set @sql = left(@sql,len(@sql) - 1)
set @sql = 'select [姓名]=max([姓名]), '+@sql+' from tb group by [姓名] '
print @sql
exec (@sql)
--drop table t
select [姓名]=max([姓名]),
數學=sum(case when [課程]='數學' then [分數] else 0 end),
物理=sum(case when [課程]='物理' then [分數] else 0 end),
英語=sum(case when [課程]='英語' then [分數] else 0 end),
語文=sum(case when [課程]='語文' then [分數] else 0 end)
from tb group by [姓名]
結果:
李四 75 95 85 65
張三 70 90 80 60

⑽ SQL 如何查詢時 豎著的數據 橫著顯示

你這個是將縱表轉換為橫表,例如如下數據:
'wangming', 'shuxue', 100
'wangming', 'yuwen', 90
'wangming', 'yingyu', 140

可以使用如下語句處理:
select a.v_name,a.v_score shuxue,b.v_score yuwen,c.v_score yingyu from temp_1 a,temp_1 b,temp_1 c
where a.v_name=b.v_name
and a.v_name=c.v_name
and a.v_name='wangming'
and a.v_course='shuxue'
and b.v_course='yuwen'
and c.v_course='yingyu';