在工作中大家是否遇到過需要将行與列進行互換的情況?我們知道在Excel中隻需要複制然後選擇性粘貼時選擇粘貼内容轉置就可以輕松進行行列互換了,那在SQL中怎麼實現行列互換呢?
現在有一張某超市的銷售業績表圖1想要變成為圖2,如何實現?
圖1 圖2
我們先将兩張表進行對比發現圖2中除了月份列一緻,後面3列數據與圖1都不一緻,需要我們自己創建後面的3列數據
處理步驟
首先需要查找月份和A門店,B門店,C門店,如果僅僅查找這幾個條件會是什麼結果?
Select 月份,'A門店','B門店','C門店'
From 銷售業績表
得到下圖
我們發現與上面的圖與我們所需要的圖2除了第一列與第一行一緻外,其餘值的部分并不是我們想要的,那接下來我們如何将這部分數據改成我們需要的圖2的數據呢?
其實此處需要用到case表達式,用case語句進行條件判斷來替換
case表達式語法如下:
Case ...when條件then表達式
Else 表達式
End
我們來試試把條件帶入case表達式中
SELECT 月份,
(case 門店 when'A門店' then 業績 else 0 END) as 'A門店',
(case 門店 when 'B門店' then 業績 else 0 END) as 'B門店',
(case 門店 when 'C門店' then 業績 else 0 END) as 'C門店'
from 銷售業績表
group by 月份
得到下面的結果
觀察這個結果發現仍不是我們想要的表,這張表裡有很多0,怎麼才能去掉0呢?其實隻要取最大值就可以了,我們來試試吧
SELECT 月份,
max(case 門店 when'A門店' then 業績 else 0 END) as 'A門店',
max(case 門店 when 'B門店' then 業績 else 0 END) as 'B門店',
max(case 門店 when 'C門店' then 業績 else 0 END) as 'C門店'
from 銷售業績表
group by 月份
這樣我們就得到了行列互換後的表(圖2)。大家學會了嗎?以後在sql中遇到需要行列互換記得用這個模闆哦!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!