SQL 資料動態彙總

2021-04-29 16:55:29 字數 2351 閱讀 1166

需求:結合基站費用資訊表和費用型別表,對基站用費分類進行統計彙總.

難點:費用型別由使用者動態配置,所以這裡也必須能動態彙總.

實現:開始的時候是想將費用型別表進行行、列轉換,再通過簡單函式就能實現.但最終失敗!在這裡我換個思路使用臨時表+游標後問題解決,效果還不錯! 

---儲存過程---

set quoted_identifier off

goset ansi_nulls on

goalter  proc sp_getallsitesum

asbegin

--首先動態建立臨時表

declare @str_createsql varchar(8000)

set @str_createsql = 'create table [temptablename] (基站編號 varchar(10),基站名 varchar(40),'

select @str_createsql = @str_createsql+'['+f_name+'] varchar(20),' from v_dict where f_dictname='費用型別'order by f_name

select @str_createsql = left(@str_createsql,len(@str_createsql)-1)+')'

exec (@str_createsql)

--先將要進行統計彙總的基站資料插入臨時表

insert into temptablename(基站編號,基站名)

select distinct f_sitecode,f_sitename from v_pay order by f_sitecode

--用於測試的sql語句

--select * from temptablename

--drop table temptablename

--delete from temptablename

--drop table temptablename

--select f_name,f_id from v_dict where f_dictname='費用型別' order by f_name

--定義游標

declare @str_updatesql nvarchar(1000)

declare @colume nvarchar(20)

declare @value nvarchar(20)

declare cur cursor for select f_name,f_id from v_dict where f_dictname='費用型別' order by f_name

open cur

fetch next from cur into @colume,@value

while @@fetch_status=0    

begin

set @str_updatesql='update temptablename set ' +  @colume + '=dbo.funcount('+ @value +',基站編號)'

exec sp_executesql @str_updatesql

fetch next from cur into @colume,@value

end  

close cur  

deallocate cur

--獲取查詢資料集

select * from temptablename

endgo

set quoted_identifier off

goset ansi_nulls on

go---函式----

set quoted_identifier on

goset ansi_nulls on

goalter        function funcount(@paytype varchar(20),@sitecode varchar(20))

returns decimal(18,2)

/*統計在某一時間單位的某中交費型別資料

*/as

begin

declare @f_all decimal(18,2)

select @f_all = convert(decimal(18,2),sum(f_paymoney)) from v_pay where f_sitecode = @sitecode

and f_feeitem = @paytype

if(@f_all is null)

set @f_all = 0

return @f_all

endgo

set quoted_identifier off

goset ansi_nulls on

go

動態規劃資料彙總

這是一篇關於動態規劃的詳解,示例是最大回文字串 照自己理解,動態規劃的狀態轉移方程,就是乙個確定怎麼由子問題轉移到當前的問題得方法,在動態規劃的求解過程中已經按照自底向上的方法把所有可能的解都列舉了一遍,動態規劃是乙個高效率的列舉方法。動態規劃尤其適合解決有重複子問題的題目,相比於遞迴暴力列舉而言,...

sql月度彙總 sql月份彙總查詢語句

sql月份彙總查詢語句 select 鉛筆 as 月份 sum case month 日期 when 1 then 鉛筆 else 0 end as 1月 sum case month 日期 when 2 then 鉛筆 else 0 end as 2月 sum case month 日期 when...

SQL語句彙總

檢視oracle伺服器端字符集 select from nls database parameters 檢視oracle客戶端字符集 select from nls instance parameters 全庫匯出資料 exp 使用者名稱 密碼 遠端的ip 埠 例項 file 存放的位置 檔名稱.d...