當前位置:首頁 » 編程語言 » sql轉行

sql轉行

發布時間: 2023-04-09 20:48:08

sql列轉行,如何把表轉化為這個結果一共一行 一列.如何實現.

通用的辦法是用動態sql解決:

declare@sqlvarchar(2000);
set@sql='select''';
select@sql=@sql+列名+','from表名;
select@sql=left(@sql,len(@sql)-1)+''''
exec(@sql);

此外,SQL Server2005以上版本可以用XML Path解決。

SELECT列名+','FROM表名FORXMLPATH('')

這樣將直接得到'a,b,c,d,d,e,',需要進一步處理去掉最後的逗號

❷ sql 列轉行

先建一張轉換後的表
create table changed
(
id number,
key varchar2(10),
val varchar2(10)
)
然後執行下面的插入語句
insert all
into changed(id,key,val) values(id,'a',a)
into changed(id,key,val) values(id,'b',b)
into changed(id,key,val) values(id,'c',c)
into changed(id,key,val) values(id,'d',d)
into changed(id,key,val) values(id,'e',e)
select id,a,b,c,d,e from change;
如果需要繼續添加,就模仿上面的格式寫好了,最後別忘記commit;

❸ sql 列轉行

selectcasewhentab1.tutorldisnullthentab2.tutorldelsetab1.tutorldend,tab1.菜品1,tab2.菜品2from
(selecttutorld,dishnameas'菜品1'from表格名稱wheredishtype=1)tab1
fulljoin
(selecttutorld,dishnameas'搜嫌菜品2'from表格名稱世橘手wheredishtype伍拍=2)tab2
ontab1.tutorld=tab2.tutorld
;

❹ SQL語句 列轉行

-- ========================= PIVOT 行列轉置 ===========================
-- 1、【行列轉置PIVOT】
declare @Score table(StuNo varchar(10), StuName varchar(50), CourseName varchar(50), Score int)
insert into @Score
select '1', 'Tom', 'Math', 80 union all
select '1', 'Tom', 'English', 82 union all
select '1', 'Tom', 'Geography', 84 union all
select '2', 'Jone', 'Math', 79 union all
select '2', 'Jone', 'English', 88 union all
select '2', 'Jone', 'Geography',86
select * from @Score

SELECT StuNo, StuName, Math, English, [Geography]
FROM @Score PIVOT (MAX(Score) FOR CourseName in (Math, English, [Geography]) ) AS ScoreList
ORDER BY StuNo

-- 2、【列行轉置UNPIVOT】
declare @ScoreList table(StuNo varchar(10), StuName varchar(50), Math int, English int, [Geography] int)
insert into @ScoreList
select '1', 'Tom', 80, 82, 84 union all
select '2', 'Jone', 79, 88, 86
select * from @ScoreList

SELECT StuNo, StuName, CourseName, Score
FROM @ScoreList UNPIVOT (Score FOR CourseName in (Math, English, [Geography]) ) AS ScorePvtTable
ORDER BY StuNo

❺ sql 列轉行

CREATE TABLE T1(A NUMBER,
b NUMBER,
c NUMBER,
d NUMBER,
e NUMBER);
insert into t1 values(1,2,3,4,5);
select * from t1;
select decode(A,1,'A',null) KEY ,decode(A,1,1,null) VALUE
from t1
union all
select decode(B,2,'B',null),decode(B,2,2,null)
from t1
union all
select decode(C,3,'C',null),decode(C,3,3,null)
from t1
union all
select decode(D,4,'D',null),decode(D,4,4,null)
from t1
union all
select decode(E,5,'E',null),decode(E,5,5,null)
from t1;

❻ SQL列轉行

用case when結薯賀構就野遲行頌手李了
SELECT * FROM dbo.pvtCustOrders
SELECT custid,years,qty
from dbo.pvtCustOrders
unpivot(qty for years in([2002],[2003],[2004]))as up
GO

❼ sql語句列轉行

我整理的行轉列的問題:

--創建tb表
createtabletb(姓名varchar(10),課程varchar(10),分數int)
insertintotbvalues('張三','語文',74)
insertintotbvalues('張三','數學',83)
insertintotbvalues('張三','物理',93)
insertintotbvalues('李四','語文',74)
insertintotbvalues('李四','數學',84)
insertintotbvalues('李四','物理',94)
go

select*Fromtb

--SQLSERVER2000靜態行轉列
select姓名as姓名,
max(case課程when'語文'then分數elsenullend)語文,
max(case課程when'數學'then分數elsenullend)數學,
max(case課程when'物理'then分數elsenullend)物理
fromtb
groupby姓名

--SQLSERVER2000動態SQL,指課程不止語文、數學、物理這三門課程。(以下同)
declare@sqlvarchar(8000)
set@sql='select姓名'
select@sql=@sql+',max(case課程when'''+課程+'''then分數else0end)['+課程+']'
from(selectdistinct課程fromtb)asa
set@sql=@sql+'fromtbgroupby姓名'
exec(@sql)

--SQLSERVER2005靜態SQL。
select*from(select*fromtb)apivot(max(分數)for課程in(語文,數學,物理))b

--SQLSERVER2005動態SQL。
declare@sqlvarchar(8000)
select@sql=isnull(@sql+'],[','')+課程fromtbgroupby課程
set@sql='['+@sql+']'
exec('select*from(select*fromtb)apivot(max(分數)for課程in('+@sql+'))b')

希望對你的學習有幫助。

❽ Flink SQL 如何實現列轉行

在 SQL 任務裡面經常會遇到一列轉多行的需求,下面就來總結一下在戚凱 Flink SQL 裡面如何實現列轉行的,先來看下面的一個具體案例.

原始數據格式如下:

現在希望得到的數據格式是這樣的:

這是一個典型的列轉行或者一行轉多行的場景,需要將 data 列進行拆分成為多行多列,下面介紹兩種實現方式.

這里在定義 data 欄位類型的時候直接定義為 ARRAY 類型,因為 unnest 函數需要一個數組類型的參數.

自定義表值函數(UDTF),自定義表值函數,將 0 個、1 個或多個標量值作為輸入參數(可以是變長參數)。與自定義的標量函數類似,但與宴賣標量函數不同。表值函數可以返回任意數量的行作為輸出,而不僅是 1 個值。返回的行可以由 1 個或多個列組成。調用一次函數輸出多行或多列數據。必須繼承 TableFunction 基類,並實現一個或者多個名為 eval 的方法, 在使用 UDTF 時,需要帶上 LATERAL TABLE兩個關鍵字.

自定義高祥喚 UDTF 解析的時候,就不需要把 data 欄位定義成 ARRAY 類型了,直接定義成 STRING 類型就可以了,並且這種方式會更加的靈活,比如還需要過濾數據或者更復雜的一些操作時都可以在 UDTF 裡面完成.

unnest 和 自定義 UDTF 函數在使用的時候都有 3 種寫法,前面兩種寫法的效果其實是一樣的,第三種寫法相當於 left join 的用法.區別在於 CROSS JOIN/INNER JOIN: 對於左側表的每一行,右側 UDTF 不輸出,則這一行不輸出.LEFT JOIN: 對於左側表的每一行,右側 UDTF 不輸出,則這一行會輸出,右側 UDTF 欄位為 null

在實際使用的時候如果 unnest 可以滿足需求就直接用 unnest 不需要帶來額外的開發,如果 unnest 函數滿足不了需求,那麼就自定義 UDTF 去完成.

❾ sql 最簡單的列轉行

oracle中列傳行可用wm_concat來實現。
如test表中數據如下:
現要將name列一列顯示成行,可用如下語句:
select wm_concat(name) from test;結果:

❿ sql語句列轉行

主要應用case語句來解決行轉列的問題
行轉列問題主要分為兩類
1)簡單的行轉列問題:
示例表:
id
sid
course
result
1
2005001
語文
80.0
2
2005001
數學
90.0
3
2005001
英語
80.0
4
2005002
語文
56.0
5
2005002
數學
69.0
6
2005002
英語
89.0
執行
select
sid,語文=isnull(sum(case
course
when
'語文'
then
result
end),0),
數學=isnull(sum(case
course
when
'數學'
then
result
end),0),
英語=isnull(sum(case
course
when
'英語'
then
result
end),0)
from
result
group
by
sid
order
by
sid
得出結果
sid
語文
數學
英語
2005001
80.0
90.0
80.0
2005002
56.0
69.0
89.0

熱點內容
家鄉編程創 發布:2024-11-02 10:11:32 瀏覽:281
ipad和安卓板玩游戲哪個好 發布:2024-11-02 10:02:37 瀏覽:803
郵箱密碼怎麼查看 發布:2024-11-02 09:59:46 瀏覽:723
wand應用怎麼安卓下載 發布:2024-11-02 09:57:46 瀏覽:79
為什麼手機銀行密碼是8位 發布:2024-11-02 09:54:19 瀏覽:459
win10搭建一個本地伺服器 發布:2024-11-02 09:53:36 瀏覽:347
git搭建本地伺服器windows 發布:2024-11-02 09:49:23 瀏覽:782
跳過地址的代理伺服器 發布:2024-11-02 09:30:03 瀏覽:387
Linux配置yum源是什麼意思 發布:2024-11-02 09:18:13 瀏覽:525
光遇安卓如何拍出高質量視頻 發布:2024-11-02 09:17:36 瀏覽:746