GVKun编程网logo

SQL2005CLR函数扩展-深入环比计算的详解(sql环比怎么算)

9

在本文中,您将会了解到关于SQL2005CLR函数扩展-深入环比计算的详解的新资讯,同时我们还将为您解释sql环比怎么算的相关在本文中,我们将带你探索SQL2005CLR函数扩展-深入环比计算的详解的

在本文中,您将会了解到关于SQL2005CLR函数扩展-深入环比计算的详解的新资讯,同时我们还将为您解释sql环比怎么算的相关在本文中,我们将带你探索SQL2005CLR函数扩展-深入环比计算的详解的奥秘,分析sql环比怎么算的特点,并给出一些关于MySQL 环比计算、SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程、sql2000/sql2005/sql2008 数据库变为 0 字节修复 / MDF 文件 0 字节恢复、Sql2000与Sql2005共存安装的解决方法的实用技巧。

本文目录一览:

SQL2005CLR函数扩展-深入环比计算的详解(sql环比怎么算)

SQL2005CLR函数扩展-深入环比计算的详解(sql环比怎么算)

此类问题还可以延伸到类似进销存的批次计算中,这也要关注其他历史记录来决定当前某条记录的状态。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 _listValue = new System.Collections.Generic.Dictionary ();
// 保存当前组
private static System.Collections.Generic.Dictionary _listGroup = new System.Collections.Generic.Dictionary (); ///
/// 获取当前组上条记录数值
///

/// /// aram name="currentGroup"> 当前组
/// aram name="currentValue"> 当前组当前值
///
[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;
}
}
///
/// 初始化并发键
///

/// ///
[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 ;
}
}
///
/// 释放并发键
///

/// ///
[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 ' 浦东 ','5985405.76','745.94','8023.98' union
select ' 浦东 ','21030788.61','1146.89','18337.23' union
select ' 普陀 ','1863896','161.39','11549.02' union
select ' 普陀 ','1614015','119.59','13496.24' union
select ' 普陀 ','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%
*/
--------------------------------------------------------------------------------
这个函数写的还是比较粗糙,如果进一步改进还可以详细定义如何获取上一个维度的方法。这里只是根据查询顺序来做缓存。感兴趣的朋友可以完善一下。

MySQL 环比计算

MySQL 环比计算

SELECT t.*,
CASE WHEN
t.SaleDealMoney_last IS NULL OR t.SaleDealMoney_last=0 THEN 0
ELSE FORMAT(((t.SaleDealMoney_this-t.SaleDealMoney_last)/t.SaleDealMoney_last)*100,2)
END link_ratio
FROM
(
SELECT
a.my_ym,
FORMAT(a.SaleDealMoney,2) AS SaleDealMoney_this,
FORMAT(b.SaleDealMoney,2) AS SaleDealMoney_last
FROM
(
SELECT
date_format(SaleDealDate,''%Y-%m'') AS my_ym,
sum(abs(SaleDealMoney)) AS SaleDealMoney
FROM
salemanage
WHERE
SaleDealProjects like ''%天九通航%''
AND
SaleDealDate>=''2019-01-01''
AND
SaleDealDate<= ''2019-12-20''
GROUP BY my_ym
)as a
LEFT JOIN
(
SELECT
date_format(DATE_ADD(SaleDealDate,INTERVAL 1 MONTH ), ''%Y-%m'') AS my_ym,
sum(abs(SaleDealMoney)) AS SaleDealMoney
FROM
salemanage
WHERE
SaleDealProjects like ''%项目名称%''
AND
SaleDealDate>= ''2019-01-01''
AND
SaleDealDate<= ''2019-12-20''
GROUP BY my_ym
) as b
ON a.my_ym=b.my_ym
) t

SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程

SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程

感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!

sql2005版本:sql2005开发版,两张CD的那种

操作系统:Window 2003 Server

假设您的电脑已安装了sql2000,下面开始安装sql2005。

一、运行光盘1

 


【图片暂缺】
跳过 准备 步骤,直接进行“服务器组件、工具、联机丛书和示例”的安装。

接着是许可协议,当然选择“我接受许可条款和条件”,不选择就没得装了。
然后是sqlserver进行安装前的支持组件安装、扫描计算机配置,接着才进入安装向导。
在安装向导里,sqlserver 2005安装程序会对系统进行配置检查,这一关是否能过就要看你电脑的配置情况了,一般不是太古老的机子应该都没有问题。
接下来输入注册信息;选择要安装的组件,这里我们只选择sql Server Database Services组件,其他的用不着。在这个过程中我们可以点击高级按钮来选择安装路径。

【图片暂缺】
接下来在
实例名中这是比较关键的一步,如果机子上没有别的sql版本的,选择默认实例名就行了,但是由于我本上原装有sql2000,所以这一步得选新实例名,然后输入实例名,实例名可以由A-Za-z16位字母组成。

 

【图片暂缺】
接着就下一步,到
服认证模式选用混合认证模式,同时设置sa密码;剩下部分的安装都选默认值,一路下一步,最后安装,完成。

此时完成后,没有出现sql Server Management Studio工具,我们还需要安装第二张盘。

运行光盘2

 

【图片暂缺】
点击仅工具、联机丛书和示例进行安装,又是同样的步骤,同意、下一步、下一步、下一步、注册信息填写,下一步。
接着我们进入最重要的一步:功能选择。这里必须将客户端组件全部选择安装至本地。

 

【图片暂缺】
接下来一路回车下去,完成安装。

打开开始〉〉〉程序〉〉〉sql Server 2005中终于看到了sql Server Management Studio。
到处,sql 2005共存数据库安装完成

sql2000/sql2005/sql2008 数据库变为 0 字节修复 / MDF 文件 0 字节恢复

sql2000/sql2005/sql2008 数据库变为 0 字节修复 / MDF 文件 0 字节恢复

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代

【数据恢复故障描述】

 这个客户是生产型数据库,数据比较重要,产生量也比较大,客户要求必须尽快修复,保证生产尽快恢复运行。sql 数据库文件,由于碎片链接过长,mdf 文件突然变为 0 字节,开始客户尝试自行网上下载软件进行恢复,文件名可以显示,但是文件的容量显示 0 字节,无法导出数据。客户有找了当地的一家恢复公司,也没有成功导出数据。

【数据恢复故障分析】

数据库变为 0 字节修复也是常遇到的一种情况,但是网上一般的普通的修复软件是没有办法直接进行恢复的。


【数据恢复过程】

 我们的工程师通过自主研发的 mdf 碎片修复软件对数据存放盘,进行底层扫描,搜索数据库相关信息,通过底层碎片组合,手工提取数据库文件,进行组合修复。

【数据恢复结果】

通过工程师加班加点的提取恢复,最终恢复成功!


【数据恢复服务承诺】
1 . 免费检测,免费电话,免费售后服务
2.
与客户签订保密协议,对客户的数据严格保密
3.
数据恢复不成功不收费
4.
专业工程师提供服务
5.
数据恢复前报价,客户确认后工程师开始数据修复
6.
整个恢复过程不会对客户的原盘有任何的写操作,以确保原盘的数据完全
【重要提醒】
重要数据一定要记得备份,如果数据不慎丢失以后,如果您对数据恢复不了解或没有操作基础的情况下,建议您不要对故障盘做任何操作,避免不必要的破坏。
   
当硬盘出现软件故障以后,比如误 GHOST 后将多个分区变成一个分区,或是误格式化、误删除以后,如果您想自己尝试着恢复的话,那么恢复出来的数据千万不要放到原来的硬盘里面,即使不同的分区也不可以。
   
当硬盘出现硬件故障以后,比如硬盘通电以后主板 BIOS 里面检测不到硬盘,或是通电以后有 “咔嚓、咔嚓 “” 嘀嗒、嘀嗒 “的异响后,尽可能不要在通电了,因为在反复通电的过程中损坏的磁头极有可能画上硬盘盘片,导致数据彻底性破坏。


Sql2000与Sql2005共存安装的解决方法

Sql2000与Sql2005共存安装的解决方法

首先说明的是两个版本的数据库安装次序没有先后之分,主要后一安装版本一定要另外创建实例,就可以并存。

这里假设已安装了Sql2000,下面开始安装Sql2005
运行光盘
选择“服务器组件、工具、联机丛书和示例”。

接着是许可协议
然后是进行安装前的支持组件安装、扫描计算机配置
在安装向导里,sqlserver 2005安装程序会对系统进行配置检查
接下来输入注册信息;选择要安装的组件,在这个过程中可以点击"高级"来选择安装路径


接着到服认证模式选用混合认证模式,同时设置sa密码;剩下部分的安装都选默认值,一路“下一步”,最后安装,完成!
至此两个版本的数据库实现并存。

两个版本数据库共用中的一些问题

* SQL2000客户端工具无法连接SQL2005,SQL2005客户端工具可以同时连接SQL2000和SQL2005.

* SQL2000服务器始终是1433端口,SQL2005使用的是动态端口。通过SQL2005提供了一个SQL BROWER服务,开启这个服务后,就可以通过查询SQL BROWER服务知道SQL2005现在正在使用哪个端口。当然也可以把SQL2005的动态端口改成静态的,修改过程如下:运行SQL配置管理程序,找到SQL的实例名称下面的协议,双击右边的TCP/IP协议,在第二选项卡中IPALL里面输入SQL运行的端口就可以了(注意不能同时填写动态端口和静态端口,否则SQL下次将无法启动),修改完成后重新启动SQL服务即可生效。
* 修改端口后如果仍然不能连接,需要开启SQL2005的远程登陆服务。在Microsoft SQL Server 2005中默认的是不允许远程登录的,会出现【provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错】的错误,通过如下方法可以打开:

配置工具->sql server外围应用配置器->服务和连接的外围应用配置器->打开MSSQLSERVER节点下的Database Engine 节点,先择"远程连接",接下建议选择"同时使用TCP/IP和named pipes",确定后,重启数据库服务就可以。
* 假设同时装了sql2000(端口1443)和sql2005(端口1433),应用程序连接字符串用server=127.0.0.1可以访问sql2005,用server=机器名/实例名可以访问sql2000
问题在于:用server=127.0.0.1:1443访问sql2000不成功
如果远程访问数据库家端口,写法如下:
逗号分隔 server=127.0.0.1,1443

今天关于SQL2005CLR函数扩展-深入环比计算的详解sql环比怎么算的分享就到这里,希望大家有所收获,若想了解更多关于MySQL 环比计算、SQL Server 安装了Sql2000的基础上安装Sql2005的详细过程、sql2000/sql2005/sql2008 数据库变为 0 字节修复 / MDF 文件 0 字节恢复、Sql2000与Sql2005共存安装的解决方法等相关知识,可以在本站进行查询。

本文标签: