乙個資料表裡面欄位有年、月、日、金額、支付方式等字段,然後現在想寫個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
ifobject_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...