SQLServer行列转换PIVOT函数中聚合函数的使用意义及选择
例子:https://blog.csdn.net/wikey_zhang/article/details/76849826
DECLARE @limitDay INT;
SET @limitDay = 35;
IF DATEDIFF(DAY, '2018-03-21 00:00:00', '2018-03-26 00:00:00') > @limitDay
BEGIN
RETURN;
END;
DECLARE @ReportID INT= 3;
DECLARE @BeginDateTime DATETIME= '2018-03-21 00:00:00';
DECLARE @EndDateTime DATETIME= '2018-03-26 00:00:00';
DECLARE @DataParam VARCHAR(50)= NULL;
EXEC dbo.Proc_GetReportData @ReportID, @BeginDateTime, @EndDateTime,@DataParam;
DECLARE @sql VARCHAR(5000)
SELECT @sql = ISNULL(@sql + ',', '') + '[' + PropertyText + ']'
FROM RPT_ReportProperty WITH ( NOLOCK )
WHERE ReportID =3
AND StatusFlag = 1
SELECT @sql
------------------------------------------------------------------------------------
USE [Tr.TWX]
GO
/****** Object: StoredProcedure [dbo].[Proc_GetReportData] Script Date: 2018/3/26 9:52:32 ******/
SET ANSI_NULLS ON
GO
DECLARE @ReportID VARCHAR(5)='3'
DECLARE @BeginDateTime VARCHAR(25) = '2018-03-21 00:00:00'
DECLARE @EndDateTime VARCHAR(25)='2018-03-26 00:00:00'
DECLARE @DataParam VARCHAR(50)=NULL
DECLARE @sql VARCHAR(5000)
SELECT @sql = ISNULL(@sql + ',', '') + '[' + PropertyText + ']'
FROM RPT_ReportProperty WITH ( NOLOCK )
WHERE ReportID = @ReportID
AND StatusFlag = 1
IF @DataParam IS NULL OR @DataParam=''
BEGIN
SET @sql = 'select ' + @sql
+ ' from(SELECT DataDate,PropertyText,DataValue FROM RPT_ReportProperty p WITH(NOLOCK) JOIN RPT_ReportData d WITH(NOLOCK) ON p.PropertyID=d.PropertyID WHERE d.ReportID='''
+ @ReportID + ''' AND DataDate>= ''' + @BeginDateTime
+ ''' AND DataDate< ''' + @EndDateTime
+ ''')tb pivot (max(DataValue) for PropertyText in (' + @sql
+ '))a'
END
ELSE
BEGIN
SET @sql = 'select ' + @sql
+ ' from(SELECT DataDate,PropertyText,DataValue FROM RPT_ReportProperty p WITH(NOLOCK) JOIN RPT_ReportData d WITH(NOLOCK) ON p.PropertyID=d.PropertyID WHERE d.ReportID='''
+ @ReportID + ''' AND DataDate>= ''' + @BeginDateTime
+ ''' AND DataDate< ''' + @EndDateTime
+ ''' AND DataParam= ''' + @DataParam
+ ''')tb pivot (max(DataValue) for PropertyText in (' + @sql
+ '))a'
END
PRINT @sql
-- EXEC(@sql)
-----------------------------------------------------------------------------------------------
SELECT [月份] ,
[日期] ,
[入库单量] ,
[入库及时率] ,
[延误入库单量] ,
[异常入库单量]
FROM ( SELECT DataDate ,
PropertyText ,
DataValue
FROM RPT_ReportProperty p WITH ( NOLOCK )
JOIN RPT_ReportData d WITH ( NOLOCK ) ON p.PropertyID = d.PropertyID
WHERE d.ReportID = '3'
AND DataDate >= '2018-03-21 00:00:00'
AND DataDate < '2018-03-26 00:00:00'
) tb PIVOT ( MAX(DataValue) FOR PropertyText IN ( [月份], [日期],
[入库单量], [入库及时率],
[延误入库单量],
[异常入库单量] ) ) a;
SELECT TOP 30 * FROM RPT_ReportData ORDER BY DataDate DESC
SELECT TOP 30 * FROM RPT_ReportProperty p
SELECT TOP 30 DataDate ,
PropertyText ,
DataValue
FROM RPT_ReportProperty p WITH ( NOLOCK )
JOIN RPT_ReportData d WITH ( NOLOCK ) ON p.PropertyID = d.PropertyID
注:数据格式在百度云 TWX下的 数据格式与内容.xls
-----------------------------------------------------------------------------------------------------------------------


SQLServer行列转换PIVOT函数中聚合函数的使用意义及选择的更多相关文章
- SQL Server中行列转换 Pivot UnPivot
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- sqlserver的over开窗函数(与排名函数或聚合函数一起使用)
首先初始化表和数据 create table t_student( Id INT, Name varchar(), Score int, ClassId INT ); insert i ...
- SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)
SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...
- 转载——CLR标量函数、表值函数和聚合函数(UDA)
本节主要介绍使用CLR创建标量函数,表值函数和聚合函数. 所谓标量函数指的就是此函数只返回一个值.表值函数返回值是一个表.聚合函数是在select语句中使用的,用来聚合一个结果集,类似于Sum()或是 ...
- sql server 系统常用函数:聚合函数 数学函数 字符串函数 日期和时间函数和自定义函数
一.系统函数 1.聚合函数 聚合函数常用于GROUP BY子句,在SQL Server 2008提供的所有聚合函数中,除了COUNT函数以外,聚合函数都会忽略空值AVG.COUNT.COUNT_BIG ...
- SQLServer中行列转换Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P ...
- SQL Server中行列转换 Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQLServer 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列)FOR 列 in (-) )AS P 完 ...
- [学习笔记] Oracle字符串函数、日期函数、数值函数、转换函数、聚合函数
函数 单行函数:对一行数据进行操作的函数,如字符串函数.数值函数.转换函数.日期函数等. 聚合函数:同时对多行数据进行操作,如求和函数等. 字符串函数 函数 说明 ASCII(X) 求字符X的ASCI ...
- oracle中的常用函数、字符串函数、数值类型函数、日期函数,聚合函数。
一.字符串的常用函数. --一.oracle 字符串常用函数 --1. concat 连接字符串的函数,只能连接[两个]字符串. 字符写在括号中,并用逗号隔开! --2."||"符 ...
随机推荐
- Less-Mixins分离规则集
//Mixins --立即执行函数 .test{/* */} #test{/* */} --指定执行函数 .test(){/* */} #test(){/* */} --调用: .test; or . ...
- angular的过滤器
angular有一些自带的过滤器,今天我就来写一下. 首先还是先把导入一个angular插件,再在我们的js中把模块和控制台写上(别忘了在html中写入模块名和在body中写入控制台名,当然控制台名可 ...
- Angular ui-route的用法
ui-router和同属AngularJS框架一部分的ng-route一样强大. ui-router提供了让我们可以做路由嵌套和视图命名的特性,嵌套路由功能主要是依赖$stateProvider服务, ...
- MySQL中的注释(有三种)
MysQL支持三种注释: .#... (推荐这种,具有通性) ."-- ..." (注意--后面有一个空格) ./*...*/
- 如何设置,使IntelliJ IDEA智能提示忽略大小写
- 创建存储过程修改role密码
1 创建存储过程 DELIMITER | drop procedure if exists pro_update_role_pwd; CREATE PROCEDURE pro_update_role_ ...
- Android 点击电话号码之间拨号
点击电话号码之间拨打电话,可用通过下面的方式实现: 假设电话号码以TextView的方式显示 1.Intent方式 在TextView的响应事件中 : String phone = tvphone.g ...
- 2015-04-14——css3 @media
//判断横竖屏 @media screen and (min-aspect-ratio: 13/13) { body {background-color:red;}} //屏幕宽高比,必须是除数形式 ...
- win7下设置smtp的方法
在win7中开启SMTP服务的方法如下: 1. 首先确定是否开启IIS服务:在运行中输入“inetmgr”,若提示出错,则表明未安装.进入步骤2,否则进入步骤3: 2.打开控制面板->程序-&g ...
- windows 键盘全局钩子
// HookapiTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #inc ...