最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL基礎(chǔ)教程之行轉(zhuǎn)列Pivot函數(shù)

 更新時(shí)間:2019年09月05日 11:39:29   作者:凡人求索  
這篇文章主要給大家介紹了關(guān)于SQL基礎(chǔ)教程之行轉(zhuǎn)列Pivot函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用SQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

未來的一個(gè)月時(shí)間中,會總結(jié)一系列SQL知識點(diǎn),一次只總結(jié)一個(gè)知識點(diǎn),盡量說明白,下面來說說SQL 中常用Pivot 函數(shù)(這里是用的數(shù)據(jù)庫是SQLSERVER,與其他數(shù)據(jù)庫是類似的,大家放心看就好)

讓我們先從一個(gè)虛構(gòu)的場景中來著手吧

萬國來朝,很多供應(yīng)商每天都匯報(bào)各自的收入情況。先來創(chuàng)建一個(gè)DailyIncome 表

create table DailyIncome(VendorId nvarchar(10), IncomeDay nvarchar(10), IncomeAmount int)

--VendorId 供應(yīng)商ID,
--IncomeDay 收入時(shí)間
--IncomeAmount 收入金額

緊接著來插入數(shù)據(jù)看看

(留意看下,有的供應(yīng)商某天中會有多次收入,應(yīng)該是分批進(jìn)賬的)

insert into DailyIncome values ('SPIKE', 'FRI', 100)
insert into DailyIncome values ('SPIKE', 'MON', 300)
insert into DailyIncome values ('FREDS', 'SUN', 400)
insert into DailyIncome values ('SPIKE', 'WED', 500)
insert into DailyIncome values ('SPIKE', 'TUE', 200)
insert into DailyIncome values ('JOHNS', 'WED', 900)
insert into DailyIncome values ('SPIKE', 'FRI', 100)
insert into DailyIncome values ('JOHNS', 'MON', 300)
insert into DailyIncome values ('SPIKE', 'SUN', 400)
insert into DailyIncome values ('JOHNS', 'FRI', 300)
insert into DailyIncome values ('FREDS', 'TUE', 500)
insert into DailyIncome values ('FREDS', 'TUE', 200)
insert into DailyIncome values ('SPIKE', 'MON', 900)
insert into DailyIncome values ('FREDS', 'FRI', 900)
insert into DailyIncome values ('FREDS', 'MON', 500)
insert into DailyIncome values ('JOHNS', 'SUN', 600)
insert into DailyIncome values ('SPIKE', 'FRI', 300)
insert into DailyIncome values ('SPIKE', 'WED', 500)
insert into DailyIncome values ('SPIKE', 'FRI', 300)
insert into DailyIncome values ('JOHNS', 'THU', 800)
insert into DailyIncome values ('JOHNS', 'SAT', 800)
insert into DailyIncome values ('SPIKE', 'TUE', 100)
insert into DailyIncome values ('SPIKE', 'THU', 300)
insert into DailyIncome values ('FREDS', 'WED', 500)
insert into DailyIncome values ('SPIKE', 'SAT', 100)
insert into DailyIncome values ('FREDS', 'SAT', 500)
insert into DailyIncome values ('FREDS', 'THU', 800)
insert into DailyIncome values ('JOHNS', 'TUE', 600)

讓我們先來看看前十行數(shù)據(jù):

select top 10 * from DailyIncome

如圖所示:


DailyIncome

雖然數(shù)據(jù)是能夠完全給展示了,但好像一眼望去不能得到對我們用處更大的信息,比如說我們想得到每個(gè)供應(yīng)商的每天的總收入,這時(shí)我們應(yīng)該做一些數(shù)據(jù)形式的轉(zhuǎn)變了,平常的所用的是這樣的。

select VendorId ,
sum(case when IncomeDay='MoN' then IncomeAmount else 0 end) MON,
sum(case when IncomeDay='TUE' then IncomeAmount else 0 end) TUE,
sum(case when IncomeDay='WED' then IncomeAmount else 0 end) WED,
sum(case when IncomeDay='THU' then IncomeAmount else 0 end) THU,
sum(case when IncomeDay='FRI' then IncomeAmount else 0 end) FRI,
sum(case when IncomeDay='SAT' then IncomeAmount else 0 end) SAT,
sum(case when IncomeDay='SUN' then IncomeAmount else 0 end) SUN
from DailyIncome group by VendorId

得到如下的結(jié)果:


case when結(jié)果

如果大家仔細(xì)看結(jié)果的話,會有這樣的發(fā)現(xiàn),這是把VendorID進(jìn)行了分組,并且對于每組中IncomeDay這一列中的值都變成了新的列名字,然后對IncomeAmount進(jìn)行求和操作。

這樣寫可能是有些麻煩,別著急,我們用Pivot函數(shù)進(jìn)行行轉(zhuǎn)列試下。

select * from DailyIncome ----第一步
pivot 
(
sum (IncomeAmount) ----第三步
for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN]) ---第二步
) as AvgIncomePerDay

來解釋下,要想用好Pivot函數(shù),應(yīng)該理解代碼注釋中的這幾步。

第一步:肯定是要明白數(shù)據(jù)源了,這里是DailyIncome

第二步:要明白要想讓哪一列的值做新的列名字

第三步:要明白對于這新的列要求那些值呢?

下面有個(gè)練習(xí)題目,做之前不要看答案啊

問:對于SPIKE這家供應(yīng)商來說,每天最大的入賬金額。

select * from DailyIncome
pivot (max (IncomeAmount) for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) as MaxIncomePerDay
where VendorId in ('SPIKE')

參考鏈接如下:

1.Pivot tables in SQL Server. A simple sample

2.行轉(zhuǎn)列:SQL SERVER PIVOT與用法解釋

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • where 子句的執(zhí)行順序

    where 子句的執(zhí)行順序

    貌似在2005之前的版本中,where子句的順序是從前往后的。但是又貌似在2005的版本中進(jìn)行了優(yōu)化,所有的順序都被統(tǒng)一成了以過濾能力進(jìn)行排序的語句。
    2009-04-04
  • 介紹PostgreSQL中的Lateral類型

    介紹PostgreSQL中的Lateral類型

    這篇文章主要介紹了介紹PostgreSQL中的Lateral類型,Lateral是PostgreSQL9.3版本以來加入的內(nèi)置類型,需要的朋友可以參考下
    2015-04-04
  • 數(shù)據(jù)庫 SQL千萬級數(shù)據(jù)規(guī)模處理概要

    數(shù)據(jù)庫 SQL千萬級數(shù)據(jù)規(guī)模處理概要

    我在前年遇到過過億條的數(shù)據(jù)。以至于一個(gè)處理過程要幾個(gè)小時(shí)的。后面慢慢優(yōu)化,查找一些經(jīng)驗(yàn)文章。才學(xué)到了一些基本方法。綜合敘之,與君探討之。
    2009-07-07
  • Doris Join 優(yōu)化原理文檔詳解

    Doris Join 優(yōu)化原理文檔詳解

    這篇文章主要為大家介紹了Doris Join 優(yōu)化原理文檔詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Navicat添加外鍵詳細(xì)操作步驟

    Navicat添加外鍵詳細(xì)操作步驟

    這篇文章主要介紹了Navicat添加外鍵詳細(xì)操作步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • sql Union和Union All的使用方法

    sql Union和Union All的使用方法

    UNION指令的目的是將兩個(gè)SQL語句的結(jié)果合并起來。從這個(gè)角度來看, 我們會產(chǎn)生這樣的感覺,UNION跟JOIN似乎有些許類似,因?yàn)檫@兩個(gè)指令都可以由多個(gè)表格中擷取資料。
    2009-07-07
  • Navicat運(yùn)行SQL文件時(shí)觸發(fā)“1067?-?Invalid?default?value?for?‘time‘”錯(cuò)誤解決方法

    Navicat運(yùn)行SQL文件時(shí)觸發(fā)“1067?-?Invalid?default?value?for?‘ti

    在使用Navicat進(jìn)行SQL文件操作時(shí),對于MySQL?5.7及以上版本,可能會觸發(fā)“1067?-?Invalid?default?value?for?‘time’”錯(cuò)誤,本文將詳細(xì)說明此問題的成因,并通過實(shí)例分析提供完整的解決方案,包括相關(guān)指令的含義和作用,需要的朋友可以參考下
    2024-12-12
  • 以前架征途時(shí)的合區(qū)的SQL語句代碼備份

    以前架征途時(shí)的合區(qū)的SQL語句代碼備份

    本來以為資料都是丟了的,今天整理移動(dòng)硬盤時(shí)發(fā)現(xiàn)found.000這個(gè)目錄超大,進(jìn)去一看,我的媽呀,資料都在這里了,這下可把我樂壞了,我趕緊把一些有用的都發(fā)上來先
    2008-08-08
  • 淺析GBase8s?唯一索引與非唯一索引問題

    淺析GBase8s?唯一索引與非唯一索引問題

    GBase8s中主鍵(PRIMARY?KEY)會自動(dòng)創(chuàng)建一個(gè)唯一索引。一個(gè)良好的表設(shè)計(jì)都應(yīng)該定義主鍵或者唯一約束索引。特別是在OLTP系統(tǒng)中,唯一索引可以幫助快速定位少量記錄,對GBase8s?索引相關(guān)知識感興趣的朋友一起看看吧
    2022-02-02
  • Hive如何寫exist/in子句示例詳解

    Hive如何寫exist/in子句示例詳解

    這篇文章主要介紹了在Hive中使用EXISTS和IN子句進(jìn)行數(shù)據(jù)查詢的方法,EXISTS子句用于檢查子查詢是否至少返回一行記錄,而IN子句用于檢查某個(gè)值是否存在于指定的列表中,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02

最新評論

通河县| 石阡县| 竹溪县| 雅安市| 上饶市| 余庆县| 正宁县| 鹤岗市| 彰化市| 汾阳市| 朝阳区| 常熟市| 淳化县| 宜章县| 余庆县| 南城县| 南通市| 云南省| 富源县| 洛隆县| 雷州市| 曲阜市| 福鼎市| 昔阳县| 萝北县| 咸丰县| 桦南县| 灵川县| 林周县| 莱阳市| 屏山县| 临安市| 蒙阴县| 图片| 沾益县| 鸡西市| 开封市| 镇平县| 章丘市| 黄大仙区| 延边|