易截截图软件、单文件、免安装、纯绿色、仅160KB

巧用SQL PIVOT实现环境监测数据的“竖横”转换


水环境监测数据存储结构中有一种模式叫做"竖表模式",即在监测数据表中,某个点位在某个时间点上各监测项目的浓度测定值在物理表中存储在多条记录中,呈竖状分布。监测数据表中包含测点代码、监测时间、监测项目代码、浓度测定值等,所有监测项目的浓度测定值都存储在同一个字段中,加以监测项目代码作为区分字段。
"竖表模式"的最大特点是灵活、具有较好的扩展性。针对新增监测因子,只需要在监测因子编码表进行维护,增加新的监测因子,就能满足数据存储的要求。这种设计模式非常适合自动监测站以及污染源监测数据的存储。但是"竖表模式"也有一些不足之处,比如数据可读性不好,难以表达某个点位某个时间点上的整体数据情况,不符合传统习惯的"横表"数据阅读方式。如何让"竖表"转换成"横表"是很多应用系统中都要遇到的一个问题。
现假设有一张名称为"自动站监测数据日均值表" 的数据表,详细数据如下:
测点代码



监测项目
污染物浓度
P001
2008
2
1
生化需氧量
298
P001
2008
2
1
总磷
0.526
P001
2008
2
1
化学需氧量
414
P001
2008
2
1
氨氮
1.09
P002
2008
2
3
生化需氧量
198
P002
2008
2
3
总磷
0.426
P002
2008
2
3
化学需氧量
314
P002
2008
2
3
总氮
3.71
   
为了能够将数据转换为横表形式,首先,在SQL Server 2005(或2008)数据库中建立存储过程usp_pivot。SQL创建语句如下:
   
CREATE PROC [dbo].[usp_pivot]
   @schema_name AS sysname    = N'dbo',-- 表/视图的架构
   @object_name AS sysname    = NULL, -- 表/视图的名称
   @on_rows   AS sysname    = NULL, -- 分组列--可以是以,相隔的多个列
   @on_cols   AS sysname    = NULL, -- 旋转列
   @agg_func   AS NVARCHAR(12) = N'MAX',-- 聚集函数
   @agg_col   AS sysname    = NULL -- 统计列
AS
   DECLARE
   @object AS NVARCHAR(600),
   @sql   AS NVARCHAR(MAX),
   @cols   AS NVARCHAR(MAX),
   @newline AS NVARCHAR(2),
   @msg   AS NVARCHAR(500);
   
   SET @newline = NCHAR(13) + NCHAR(10);
   SET @object = QUOTENAME(@schema_name) + N'.'


相关文档:

SQL 2000和SQL 2005服务端口查看或修改

1、 SQL Server:入站端口为TCP 1433,出站端口为TCP任意端口(1024~5000之间的端口号);
2、 SQL Browser :入站端口为UDP 1434,出站端口为UDP任意端口(1024~5000之间的端口号);
3、查看或修改SQL2005实例的端口号,如果系统中同时安装SQL 2000和SQL 2005,SQL 2005的连接端口可能不是1433,我们需要更改SQL 2005 ......

防范sql注入攻击(下) 参数化sql

上一篇写的sql注入的基本原理,本来要接着写这篇的,但是由于时间的原因一直没有写成,今天是五一假期,总算是能抽空写写了。
作为一个程序员,防范sql注入的第一线是由我们来守护的,只要我们在程序中留少许的漏洞,就会给程序增强安全特性。所以我们要做的是要写安全的程序,防止sql注入在程序体现在不要拼接sql字符串, ......

SQL Server 系统全局变量

SQL Server 系统全局变量
@@CONNECTIONS
返回自上次启动以来连接或试图连接的次数。
@@CURSOR_ROWS
返回连接上最后打开的游标中当前存在的合格行的数量(返回被打开的游标中还未被读取的有效数据行的行数)
@@DATEFIRST
返回每周第一天的数字
@@ERROR
返回最后执行的SQL 语句的错误代码。
@@FETCH_STATUS
返回 ......

Visual Studio和SQL Server的安装顺序问题

在安装Visual Studio+SQL Server的开发环境的时候往往会有很多错误,其中最麻烦的一条就死安装完成之后没有数据库管理工具,即没有SQL Server 2005 Management Studio。出现这样的问题主要有两个原因,一是系统已经存在其他版本的SQL数据库或者Express版本,二是安装环境的时候像我一样先安装了Visual Studio 2005/2008,然 ......

sql条件语句

Transact-SQL 语言使用的流程控制命令与常见的程序设计语言类似主要有以下几种控制命令。
4.6.1 IF…ELSE

语法如下:
IF <条件表达式>
<命令行或程序块>
[ELSE [条件表达式]
<命令行
或程序块>]
其中<条件表达式>可以是各种表达式的组合,但表达式的值必须是逻辑值“真&rdq ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号