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

sql橫表轉縱代碼

發布時間: 2022-08-31 04:25:47

⑴ oracle 資料庫sql高手來看看,如何縱向轉橫向

假設表有A,B兩列,代碼如下

selectA,LISTAGG(B,',')WITHINGROUP(ORDERBYB)BfromtablegroupbyA

上面SQL文可將B列橫向輸出,以逗號分割,輸出順序按B的值升序排列

⑵ 在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如何自動實現更新,豎表變橫表,是要用觸發器還是別的方法實現,具體代碼如何寫

先給你講一下你說的橫表變豎表,其實就是行列轉換,我寫個例子給你看看:

列轉行

錄入經營范圍時候會遇到列傳行的問題解決方案如下:

在temp1 表有一下欄位內容:

⑷ 動態Sql語句實現橫表轉豎表,成績轉成列

select @sql1 = @sql1 + ' , max(case CouName when ''' + CouName + ''' then Score else NULL end) 這里寫錯了,應該是
select @sql1 = @sql1 + ' , max(case when CouName =''' + CouName + ''' then Score else NULL end) CouName

然後後面少了group by 學號,姓名行轉列後面一定要把不轉的列group 出來

⑸ sql 橫表變豎表 動態語句怎麼寫

1、首先 日期沒有出現在Group里
2、其次,組成動態的【,isnull(sum(...))】沒有去掉最前面的那個逗號
3、感覺這個語句肯定不會執行成功,最好你把表結構給出,並且給出示例結果來。

⑹ 求將橫表轉為豎表的SQL語句 如圖:

select stuno,stuname,marks1 from TB_test
union all select stuno,stuname,marks2 as marks1 from TB_test
union all select stuno,stuname,marks3 as marks1 from TB_test
union all select stuno,stuname,marks4 as marks1 from TB_test

⑺ SQL sever中將橫表轉縱表時的這段代碼是什麼意思,可以詳細解釋一下嗎

查詢每個 name 中 語文 的最大 result 值,如果 語文 的 result 沒有值,則返回0;
其他數學、物理原理一樣;

⑻ SQL 將橫向數據匯總後轉為縱向

select a.*,
sum(case b.種類 when ZA then isnull(數量,0) else 0 end) as ZA,
sum(case b. 種類 when ZB then isnull(數量,0) else 0 end) as ZB,
sum(case b.種類 when ZC then isnull(數量,0) else 0 end) as ZC, from 表1 a,表2 where a.單號=b.單號

⑼ 求SQL語句,報表橫向轉縱向,貌似有交叉,感謝!

SELECT 年份,月份,部門編碼,SUM(CASE WHEN 支出項目='人員費' AND 費用分類='直接' THEN 金額 ELSE 0 END) 人員費直接成本,
SUM(CASE WHEN 支出項目='人員費' AND 費用分類='間接' THEN 金額 ELSE 0 END) 人員費間接成本,
SUM(CASE WHEN 支出項目='水電費' AND 費用分類='直接' THEN 金額 ELSE 0 END) 水電費直接成本,
SUM(CASE WHEN 支出項目='水電費' AND 費用分類='間接' THEN 金額 ELSE 0 END) 水電費間接成本,
SUM(CASE WHEN 支出項目='其他費' AND 費用分類='直接' THEN 金額 ELSE 0 END) 其他費直接成本,
SUM(CASE WHEN 支出項目='其他費' AND 費用分類='間接' THEN 金額 ELSE 0 END) 其他費間接成本
FROM 表
GROUP BY 年份,月份,部門編碼

⑽ SQL 將橫向數據轉為縱向記錄

使用union連接SQL語句,可以實現常見的SQL行轉列運用。

以圖中表格為例:


需要注意,如果有需要顯示重復記錄,把union 改成 union all