婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQL2005CLR函數擴展-深入環比計算的詳解

SQL2005CLR函數擴展-深入環比計算的詳解

熱門標簽:沈陽智能外呼系統代理 浙江地圖標注 九鹿林外呼系統怎么收費 海南自動外呼系統價格 創業電銷機器人 舞鋼市地圖標注app 松原導航地圖標注 滄州營銷外呼系統軟件 電銷機器人虛擬號碼

此類問題還可以延伸到類似進銷存的批次計算中,這也要關注其他歷史記錄來決定當前某條記錄的狀態。

sql語句無法簡單實現mdx語句的類似功能,必須得用交叉表關聯來對比。這里我們用CLR函數來實現mdx語句的類似語法。在select的時候把得到過的做個緩存就可以了。效率應該可以提高不少。

clr的代碼如下,編譯為TestFun.dll,復制到sql服務器的文件目錄下。
--------------------------------------------------------------------------------

復制代碼 代碼如下:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{

    // 保存當前組當前值
    private static System.Collections.Generic.Dictionary string , SqlString > _listValue = new System.Collections.Generic.Dictionary string , SqlString >();
    // 保存當前組
    private static System.Collections.Generic.Dictionary string , string > _listGroup  = new System.Collections.Generic.Dictionary string , string >();

    /// summary>
    /// 獲取當前組上條記錄數值
    /// /summary>
    /// param name="key"> 并發鍵 /param>
    /// param name="currentGroup"> 當前組 /param>
    /// param name="currentValue"> 當前組當前值 /param>
    /// returns>/returns>
    [Microsoft.SqlServer.Server.SqlFunction ]
    public static SqlString GetPrevMemberValue(SqlString key,SqlString currentGroup,SqlString currentValue)
    {
        if (key.IsNull || currentGroup.IsNull) return SqlString .Null;

      
        try
        {
            SqlString prevMemberValue = _listValue[key.Value];

            // 組變更
            if (_listGroup[key.Value] != currentGroup.Value)
            {
                prevMemberValue = SqlString .Null;
                _listGroup[key.Value] = currentGroup.Value;
             }
            // 值變更
            _listValue[key.Value] = currentValue;

            return prevMemberValue;
        }
        catch
        {
            return SqlString .Null;
        }
    }
    /// summary>
    /// 初始化并發鍵
    /// /summary>
    /// param name="key">/param>
    /// returns>/returns>
    [Microsoft.SqlServer.Server.SqlFunction ]
    public static SqlBoolean InitKey(SqlString key)
    {
        try
        {
            _listValue.Add(key.Value, SqlString .Null);
            _listGroup.Add(key.Value, string .Empty);
            return true ;
        }
        catch
        {
            return false ;
        }
    }
    /// summary>
    /// 釋放并發鍵
    /// /summary>
    /// param name="key">/param>
    /// returns>/returns>
    [Microsoft.SqlServer.Server.SqlFunction ]
    public static SqlBoolean DisposeKey(SqlString key)
    {
        try
        {
            _listValue.Remove(key.Value);
            _listGroup.Remove(key.Value);
            return true ;
        }
        catch
        {
            return false ;
        }
    }
};

--------------------------------------------------------------------------------
部署和生成自定義函數,其中考慮到并發,我們還是需要一個并發鍵來表達當前查詢
--------------------------------------------------------------------------------
復制代碼 代碼如下:

CREATE ASSEMBLY TestForSQLCLR FROM 'E:/sqlclrdata/TestFun.dll' WITH PERMISSION_SET = UnSAFE;
--
go
CREATE FUNCTION dbo. xfn_GetPrevMemberValue 
(  
    @key nvarchar ( 255),
    @initByDim nvarchar ( 255),
    @currentValue nvarchar ( 255)
)    
RETURNS nvarchar ( 255)
AS EXTERNAL NAME TestForSQLCLR. [UserDefinedFunctions]. GetPrevMemberValue
go
CREATE FUNCTION dbo. xfn_initKey
(  
    @key nvarchar ( 255)
)    
RETURNS bit
AS EXTERNAL NAME TestForSQLCLR. [UserDefinedFunctions]. InitKey
go
CREATE FUNCTION dbo. xfn_disposeKey 
(  
    @key nvarchar ( 255)
)    
RETURNS bit
AS EXTERNAL NAME TestForSQLCLR. [UserDefinedFunctions]. DisposeKey

--------------------------------------------------------------------------------
這樣我們就可以使用了,測試腳本如下, xfn_GetPrevMemberValue就是獲取上月價格的函數。
--------------------------------------------------------------------------------
-- 建立測試環境
復制代碼 代碼如下:

declare @t table (
    [ 區域 ] [varchar]( 4) COLLATE Chinese_PRC_CI_AS NULL,
    [TradeMonth] [varchar]( 7) COLLATE Chinese_PRC_CI_AS NULL,
    [TradeMoney] [float] NULL,
    [TradeArea] [float] NULL,
    [TradePrice] [float] NULL
)
insert into @t
select ' 閔行 ' , '2007-03' , '2125714.91' , '241.65' , '8796.67' union
select ' 閔行 ' , '2007-04' , '8408307.64' , '907.32' , '9267.19' union
select ' 閔行 ' , '2007-05' , '10230321.95' , '1095.88' , '9335.26' union
select ' 浦東 ' , '2007-01' , '12738432.25' , '1419.05' , '8976.73' union
select ' 浦東 ' , '2007-02' , '4970536.74' , '395.49' , '12568.05' union
select ' 浦東 ' , '2007-03' , '5985405.76' , '745.94' , '8023.98' union
select ' 浦東 ' , '2007-04' , '21030788.61' , '1146.89' , '18337.23' union
select ' 普陀 ' , '2007-01' , '1863896' , '161.39' , '11549.02' union
select ' 普陀 ' , '2007-02' , '1614015' , '119.59' , '13496.24' union
select ' 普陀 ' , '2007-03' , '1059235.19' , '135.21' , '7834'
 
-- 測試語句
復制代碼 代碼如下:

declare @key varchar ( 40)
declare @b bit

set @key= newid ()
select @b= dbo. xfn_initKey( @key)

select 區域 , TradeMonth, TradePrice, LastMonthPrice,
cast ( round (( Tradeprice- LastMonthPrice)* 100/ LastMonthPrice, 2) as varchar ( 10))+ '%' as 環比 from (
select *, cast ( dbo. xfn_GetPrevMemberValue( @key, 區域 , Tradeprice) as float ) as LastMonthPrice from @t
) t
select @b= dbo. xfn_disposeKey( @key)
 
-- 結果
/*
區域   TradeMonth TradePrice             LastMonthPrice         環比
---- ---------- ---------------------- ---------------------- -----------
閔行   2007-03    8796.67                NULL                   NULL
閔行   2007-04    9267.19                8796.67                5.35%
閔行   2007-05    9335.26                9267.19                 0.73%
浦東   2007-01    8976.73                NULL                   NULL
浦東   2007-02    12568.05               8976.73                40.01%
浦東   2007-03    8023.98                12568                  -36.16%
浦東   2007-04    18337.23                8023.98                128.53%
普陀   2007-01    11549.02               NULL                   NULL
普陀   2007-02    13496.24               11549                  16.86%
普陀   2007-03    7834                   13496.2                -41.95%
*/
--------------------------------------------------------------------------------
這個函數寫的還是比較粗糙,如果進一步改進還可以詳細定義如何獲取上一個維度的方法。這里只是根據查詢順序來做緩存。感興趣的朋友可以完善一下。

您可能感興趣的文章:
  • 通過SQLSERVER重啟SQLSERVER服務和計算機的方法
  • 利用php+mysql來做一個功能強大的在線計算器
  • 在php和MySql中計算時間差的方法
  • mysql 字符串長度計算實現代碼(gb2312+utf8)
  • SQLSERVER 根據地圖經緯度計算距離差示例
  • 用sql實現18位身份證校驗代碼分享 身份證校驗位計算
  • SQL計算字符串中最大的遞增子序列的方法
  • SQL語句計算兩個日期之間有多少個工作日的方法
  • 如何計算多個訂單的核銷金額

標簽:日喀則 西藏 咸寧 海口 公主嶺 商洛 臺灣 寶雞

巨人網絡通訊聲明:本文標題《SQL2005CLR函數擴展-深入環比計算的詳解》,本文關鍵詞  SQL2005CLR,函數,擴展,深入,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL2005CLR函數擴展-深入環比計算的詳解》相關的同類信息!
  • 本頁收集關于SQL2005CLR函數擴展-深入環比計算的詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91色porny在线视频| 91精品免费在线| 亚洲综合男人的天堂| 中文字幕国产一区| 久久精品人人做人人综合| 欧美日韩亚洲丝袜制服| 99免费精品在线| 亚洲高清免费观看高清完整版在线观看| 欧美三级视频在线观看| 久久电影国产免费久久电影| 亚洲图片有声小说| 亚洲一区成人在线| 亚洲国产wwwccc36天堂| 亚洲欧洲韩国日本视频| 欧美羞羞免费网站| 91官网在线免费观看| 欧美日本国产视频| 日韩视频在线永久播放| 日韩精品中文字幕一区 | 秋霞午夜av一区二区三区| 日韩欧美一区二区不卡| 欧美一区二区三区在线视频| 26uuu精品一区二区| 一区二区三区欧美激情| 国产日韩欧美一区二区三区综合| 精品在线免费视频| 精品一区二区在线视频| 欧美日韩精品专区| 久久综合九色综合久久久精品综合| 中文字幕一区二| 亚洲欧美在线另类| 日本成人超碰在线观看| 91免费版在线看| 久久精品一区四区| 欧美日韩视频在线一区二区 | 欧美另类videos死尸| 日韩丝袜美女视频| 亚洲一卡二卡三卡四卡无卡久久| 精品国产免费久久| 成人av集中营| 日韩国产高清影视| 一本大道久久a久久精品综合| 日韩三级中文字幕| 欧美系列亚洲系列| 亚洲国产另类精品专区| 99在线热播精品免费| 国产精品久久99| 在线观看不卡视频| 国产一区二区日韩精品| 91精品视频网| 精品成人一区二区| 91精品国产91热久久久做人人| 一区二区三区四区高清精品免费观看| 欧美亚洲动漫制服丝袜| 精品久久久久99| 国产福利精品一区| 中文子幕无线码一区tr| 成人a免费在线看| 99久久国产综合精品色伊| 综合久久久久综合| 91精品在线观看入口| 久久国产欧美日韩精品| 日本一区二区免费在线观看视频| 国产精品久99| 91精品婷婷国产综合久久竹菊| 欧美男生操女生| 国产一区欧美一区| 亚洲福利一二三区| 777亚洲妇女| 色综合视频一区二区三区高清| 亚洲精品一区二区三区99| www.成人网.com| 黄色资源网久久资源365| 亚洲国产日韩精品| 中文字幕在线不卡视频| 精品国产精品网麻豆系列| 欧美精品乱人伦久久久久久| 国产成人午夜精品影院观看视频| 欧美亚洲免费在线一区| 欧美午夜精品免费| 天天色天天操综合| 久久综合九色综合欧美就去吻 | 在线观看一区二区视频| 日韩国产精品久久久久久亚洲| 经典三级一区二区| 国产欧美日韩三级| 亚洲精品一区二区三区蜜桃下载| 亚洲www啪成人一区二区麻豆| 99精品视频在线观看| 国内成人自拍视频| 黑人巨大精品欧美黑白配亚洲| 欧美日韩在线三区| 成人国产精品免费观看视频| 国产在线精品国自产拍免费| 成人性视频网站| 国产伦精品一区二区三区免费| www久久精品| 欧美精品一区二区三区久久久| 综合色中文字幕| 午夜精品福利在线| 偷拍一区二区三区四区| 国产精品99久久不卡二区| 99v久久综合狠狠综合久久| 精品视频123区在线观看| 久久精品人人做人人爽人人| 一区二区三区在线观看视频| 九一久久久久久| 在线免费av一区| 久久精品人人爽人人爽| 性久久久久久久久久久久| 成人高清在线视频| 精品盗摄一区二区三区| 天天综合天天做天天综合| av在线一区二区| 国产精品久久久久久久久果冻传媒 | 亚洲黄色录像片| 日韩av午夜在线观看| 国产成人自拍网| 欧美亚洲综合一区| 欧洲一区二区三区在线| 精品视频一区二区不卡| 亚洲三级在线播放| 92精品国产成人观看免费| 欧美本精品男人aⅴ天堂| 久久99精品国产麻豆不卡| 日韩午夜中文字幕| 九九九久久久精品| 国产三级精品三级| 91网站最新地址| 亚洲va欧美va天堂v国产综合| 欧美三级韩国三级日本三斤| 欧美国产丝袜视频| 9i在线看片成人免费| 亚洲精品菠萝久久久久久久| 91成人免费在线视频| 日韩一区精品字幕| 久久久精品2019中文字幕之3| 久久精品一二三| 国产一区二区三区精品视频| 国产日韩欧美在线一区| 色美美综合视频| 美女高潮久久久| 亚洲天堂2014| 久久先锋资源网| 欧美精品一级二级| 91精品国产综合久久香蕉麻豆 | 免费不卡在线观看| 欧美变态tickle挠乳网站| 国产一区二区中文字幕| 中文字幕综合网| 久久综合久久综合久久| 欧美日韩精品三区| 91福利在线看| 色香蕉成人二区免费| 国产福利不卡视频| 日韩中文欧美在线| 亚洲美女少妇撒尿| 国产精品短视频| 日本一区免费视频| 久久综合九色综合97_久久久| 日韩av电影一区| 日韩极品在线观看| 日韩电影网1区2区| 麻豆久久一区二区| 天堂成人国产精品一区| 亚洲va欧美va天堂v国产综合| 欧美美女一区二区三区| 欧美午夜一区二区| 欧美久久久久久蜜桃| 91精品国产综合久久精品性色 | 懂色av一区二区夜夜嗨| 日韩专区一卡二卡| 国产一区二区三区四| 国产一区激情在线| 91在线观看视频| 欧美日韩激情一区| 久久先锋影音av| 亚洲激情图片qvod| 国产最新精品精品你懂的| 国产成人在线视频免费播放| 91小视频免费观看| 日韩视频免费直播| 国产精品久久久久久久久久免费看 | 亚洲大片一区二区三区| 日韩国产在线观看| 97超碰欧美中文字幕| 波多野结衣一区二区三区| 亚洲欧洲日韩在线| 亚洲精品中文字幕在线观看| 美女网站视频久久| 欧美综合久久久| 欧美国产禁国产网站cc| 亚洲第一福利视频在线| 国产成人精品一区二区三区网站观看| 久久人人爽爽爽人久久久| 亚洲欧洲精品天堂一级 | 99re成人在线| 国产欧美一区二区三区网站| 亚洲国产综合91精品麻豆| 成人av免费在线播放|