複雜sql分組查詢 ( pivot)

2022-05-10 09:00:45 字數 3329 閱讀 2407

乙個資料表裡面欄位有年、月、日、金額、支付方式等字段,然後現在想寫個sql語句,把每一天的每種支付方式金額(支付方式有多重)排在同一行,

最後在增加一列小計當前的所有支付方式的金額。如下圖:

原sql查詢出來的結果是這樣的:

然後想實現的sql結果最後呈現是這樣的:

這可為難了我了,簡單的增刪改查左右鏈結sql語句我還會寫,這個稍微複雜一點我就不知道如何下手了。該怎麼分組,然後把行增加為列呢?

去找度娘搜的時候,都不知道怎麼描述自己的想搜的關鍵字。最後找了一位sql高手同學幫忙解決了這個問題,

人家只是一句簡單的sql語句就把我的需求給實現了,實在是讓我佩服!這個pivot關鍵是什麼東東,我還第一次看見,從來沒用過,這麼強大!

sql語句:

select

year,months,tdays,[

711], [

bankin

],[ituneshk

] , [

711]+[

bankin]+

[ituneshk]as

total

from ( select

*from #temp) as

tpivot

(sum(amount) for

[paytype

]in ( [

711], [

bankin

],[ituneshk

])) as t;

效果截圖如下:

補充:關於乙個迴圈插入資料sql語句問題

需求:隨機從乙個表查出5條id,然後插入到另外乙個表中。

實現:剛開始使用游標,後面頭說效率不好,影響效能,然後改成臨時表插入結果集。之前沒寫過這種sql, 感覺效果很棒,記錄一下:

---- 使用游標迴圈插入-------

if

object_id('

sp_addrecord

') is

notnull

drop

proc

sp_addrecord

gocreate

proc

sp_addrecord

@idint

--傳入的id引數

asbegin

tran

--使用游標迴圈插入到記錄表中tbl_record

declare

@fromid

intdeclare temp_cursor cursor

for--

定義游標cursor1

select

top5 id from tbl_member where id<>

@idorder

bynewid() --

隨機獲取5個id

open temp_cursor --

開啟游標

fetch

next

from temp_cursor into

@fromid

--將游標向下移1行,獲取的資料放入之前定義的變數@toid中

while

@@fetch_status=0

--判斷是否成功獲取資料

begin

--進行相應處理(跟據需要填入sql文)

insert

into tbl_record (fromid, toid, [

status

], createdate) values(@fromid, @id, 0, getdate

())

fetch

next

from temp_cursor into

@fromid

--將游標向下移1行

endclose temp_cursor --

關閉游標

deallocate temp_cursor --

釋放游標

if@@error

<>

0goto

err

select1as

resultstatus

commit

tran

return

err:

select0as

resultstatus

rollback

tran

return

go

---  使用臨時表插入結果,實現同樣的效果,效率更好 -----

if

object_id('

sp_addrecord

') is

notnull

drop

proc

sp_addrecord

gocreate

proc

sp_addrecord

@idint

--傳入的id引數

asbegin

tran

select

top5 id into #datingmember from tbl_member where id<>

@idorder

bynewid() --

隨機獲取5個id

insert

into tbl_record (fromid, toid, [

status

], createdate)

select id,@id

as toid,0, getdate

()

from

#datingmember

drop

table #datingmember --

刪除臨時表

if@@error

<>

0goto

err

select1as

resultstatus

commit

tran

return

err:

select0as

resultstatus

rollback

tran

return

go

sql複雜查詢

今天在review同事的 的時候,碰到乙個比較頭疼的資料庫查詢。例如,我想查列a的結果,但我要根據b列的值的情況來確定a列的輸出,說白了就是我可以自己控制得到的輸出。這個情況有兩種方法來實現。第一種是decode,這個關鍵字似乎只是oracle支援。而且也沒有解決我的問題,因為我覺得他類似於邏輯中的...

SQL 複雜查詢

近期碰到需要取日期最小的不同條件記錄的問題,請各位xdjm賜教!表a 表a 序號 材料 數量 入庫日期 1 a 8 2009 12 12 a 9 2009 12 53 b 12 2009 11 184 b 10 2009 11 195 c 5 2009 10 96 c 13 2009 11 8 想要...

sql複雜巢狀查詢

最近在做各類小應用,用到了mysql,有時候會用到一些比較複雜的巢狀查詢,在研究怎麼通過sql實現這些。假設下面這張表 stu 描述學生的基本資訊 idname grade 1jim72 tom8 3cake9 另外一張表 sco 描述學生的成績資訊 stu id subject score 1ma...