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

sql查詢行轉列

發布時間: 2022-11-25 22:54:16

A. sql 行轉列

SELECT DISTINCT
(SELECT a FROM tab WHERE b = '未知'),
(SELECT a FROM tab WHERE b = '輸入為空'),
(SELECT a FROM tab WHERE b = 'cc')
FROM tab
UNION ALL
SELECT
cast((SELECT a FROM tab WHERE b = '未知') / t.sumA AS DECIMAL(3, 1)),
(SELECT a FROM tab WHERE b = '輸入為空') / t.sumA,
(SELECT a FROM tab WHERE b = 'cc') / t.sumA
FROM (SELECT SUM(a) AS sumA FROM tab) t

這里cast((SELECT a FROM tab WHERE b = '未知') / t.sumA AS DECIMAL(3, 1)), 不同SQL方言轉化方式不一樣,目的是為了轉換成小數

B. SQL行轉列,列轉行

行列轉換在做報表分析時還是經常會遇到的,今天就說一下如何實現行列轉換吧。

行列轉換就是如下圖所示兩種展示形式的互相轉換

假如我們有下表:

通過上面 SQL 語句即可得到下面的結果

PIVOT 後跟一個聚合函數來拿到結果,FOR 後面跟的科目是我們要轉換的列,這樣的話科目中的語文、數學、英語就就被轉換為列。IN 後面跟的就是具體的科目值。

當然我們也可以用 CASE WHEN 得到同樣的結果,就是寫起來麻煩一點。

使用 CASE WHEN 可以得到和 PIVOT 同樣的結果,沒有 PIVOT 簡單直觀。

假設我們有下表 student1

通過 UNPIVOT 即可得到如下結果:

我們也可以使用下面方法得到同樣結果

C. sql中一對多關系的查詢結果的多行轉換成一行多列

1、創建測試表,

create table test_fee(userid number, feeid number, fee number);

D. sql查詢行轉列查詢語句

單純是你如上數據的話:

selectdatetime,'ab'type,abvaluefromtesttable
unionall
selectdatetime,'ac'type,acvaluefromtesttable

E. SQL語句行轉列

根據樓主的描述,特為樓主總結如下,在SqlServer裡面行列轉換的語法一般是: select 欄位, sum(case when 要轉換的行單元格的欄位名='行欄位內容' then 聚合的欄位名 end ) as 自定義的列標題1 from 表的名字 group by 欄位(注意,分組聚合就是根據這個欄位來的,具體到樓主的問題,這里的欄位就應該是org_id) 如果有多個列,之間用逗號隔開就可以了,最後一個參數和from之間不要用逗號。 具體到樓主的顯示效果就可以這樣寫了。代碼參考如下: Select org_id , sum(case when channel ='團險' then PREM end) As '團險保費' , sum(case when channel ='個險' then PREM end) As '個險保費 From 你的表名 Group By org_id

F. SQL行轉列應用的動態實現方式

SQL行轉列的需求,在項目中還是經常可見的,尤其報表類的應用,更是非常廣泛!上期我們講了SQL行轉列的靜態實現方式,本期搞一下行轉列的動態實現方案,解決方案並不唯一,這里採用存儲過程的實現方式!

接下來我們詳細講解下SQL動態行轉列的實現步驟:

這里還是老套路,IT編程人入門的經典學生選課表系列,學生表、課程表、成績表!就拿這套耳熟能詳的表結構進行講解!

插入模擬的數據,用於動態行轉案例的使用!

這一步相對還是比較重要,畢竟我們要在一個靜態的行轉列基礎之上,構建動態的行轉列應用,課程數據會有動態變化,學生也會選擇新開的課程,這樣靜態模式勢必不會有效,但參照靜態模板,去開發動態的模式,則更加有參照性!

通過測試,數據效果沒有問題,正是我們期待的樣子!

動態行轉列無疑需要使用SQL編程的技術,動態的遞歸課程名稱,這樣才可以一勞永逸的解決問題!

先編寫動態的SQL腳本

測試結果與靜態SQL完全一致,看來問題已經解決,接下來就是優化的問題了!

將上述的動態腳本封裝成存儲過程,第一可以盡量地提升查詢效率,第二方便代碼段的調用!

封裝完存儲過程,我們再執行一下,看看結果!果然沒有任何問題,與預期完全一致!

這時候我們更改一下數據,課程表中新增物理、化學兩門課程,諾克薩斯之手分別選擇了兩門課程,蓋倫僅僅選擇了化學,武器大師逃學,倆門課都沒有選擇。

數據改變之後,我們繼續測試一下,再次執行我們編寫好的存儲過程,結果非常完美,隨著數據的變化,查詢的結果集也是對應的變化,非常NICE,大功告成了!

連續倆篇的文章更新,SQL行轉列在項目中的應用都已經涵蓋了。即將步入年底了,肯定有很多小夥伴被客戶、領導追著搞各種報表,希望對小夥伴們有些許的幫助。#學編程# #互聯網# #IT#

G. 怎樣實現sql行轉列

--試一試。。。

createtable#test
(
姓名nvarchar(10),
學號nvarchar(10),
題號nvarchar(10),
答案nvarchar(10)
)
go
insertinto#test
select'張三','001','1','A'unionall
select'張三','001','2','C'unionall
select'李四','002','1','B'unionall
select'李四','002','2','D'

select*from#test

dECLARE@sqlVARCHAR(max)
SET@sql=''
SELECT@sql=@sql+',['+題號+']'FROM#testGROUPBY題號
SET@sql=STUFF(@sql,1,1,'')
SET@sql='select*from#testpivot(max(答案)for題號in('+@sql+'))a'
PRINT@sql
exec(@sql)

H. 行轉列,列轉行怎麼做sql

/*行轉列*/
SELECT*FROM[StudentScores]/*數據源*/ASP
PIVOT
(SUM(Score/*行轉列後列的值*/)FOR
p.Subject/*需要行轉列的列*/IN([語文],[數學],[英語],[生物]/*列的值*/)
)AST
/*列轉行*/
SELECTP.ProgrectName,P.Supplier,P.SupplyNumFROM(SELECTProgrectName,OverseaSupply,NativeSupply,
SouthSupply,NorthSupplyFROMProgrectDetail
)T
UNPIVOT
(
SupplyNumFORSupplierIN
(OverseaSupply,NativeSupply,SouthSupply,NorthSupply)
)P

I. sql行轉列

SELECT e.NAME as name,
count(case when DATEPART(year,c.START_TIME)=2014 then 1 else null end ) as count2014,
count(case when DATEPART(year,c.START_TIME)=2015 then 1 else null end ) as count2015
from ENVI_DATA_STATISTIC_COMP c
LEFT JOIN ENVI_CITY e on e.CITY_ID=c.CITY_ID
where c.COMP_NAME like '%藍天白雲%' and INDEX_TYPE='12'
and (c.START_TIME like '%2014-08%' or c.START_TIME like '%2015-08%' ) and STATISTIC_TYPE='1' and c.VALID_FLAG='1'
group by name

應該是醬紫的,使用case when 轉換~

J. SQL 行轉列

我這里兩種都給你介紹,行轉列和列轉行:

列轉行——

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

在temp1 表有一下欄位內容: