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

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

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

前言

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

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

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

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

--VendorId 供應(yīng)商ID,
--IncomeDay 收入時間
--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ù)是能夠完全給展示了,但好像一眼望去不能得到對我們用處更大的信息,比如說我們想得到每個供應(yīng)商的每天的總收入,這時我們應(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

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

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

下面有個練習(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í)價值,謝謝大家對腳本之家的支持。

相關(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ù)。以至于一個處理過程要幾個小時的。后面慢慢優(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í)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • sql Union和Union All的使用方法

    sql Union和Union All的使用方法

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

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

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

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

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

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

    GBase8s中主鍵(PRIMARY?KEY)會自動創(chuàng)建一個唯一索引。一個良好的表設(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子句用于檢查某個值是否存在于指定的列表中,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02

最新評論

兴和县| 闽清县| 兰溪市| 雅安市| 德昌县| 册亨县| 天水市| 麟游县| 遵义市| 岑溪市| 宁明县| 河池市| 琼海市| 明光市| 历史| 察隅县| 房产| 资阳市| 分宜县| 南汇区| 共和县| 汝州市| 司法| 湘潭县| 黄骅市| 云浮市| 凉城县| 绥阳县| 霍林郭勒市| 黄浦区| 布尔津县| 拉萨市| 绥芬河市| 武定县| 喀喇沁旗| 类乌齐县| 孙吴县| 晋宁县| 西丰县| 伊川县| 龙川县|