T-SQL Recipes之Customized Database Objects
The Problem
创建灵活自定义对象决非是一个简单的任务。比如HR想看每种工作职称在所有年限里面的入职累计情况
The Solution
我们一步一步来拆解吧:
- 获取入职年限的集合,如1999,2000,2001...etc
- 根据唯一值来统计每年的入职数量,当然是得用动态PIVOT
- 然后写进SP里面
示例1:获取年限集合
DECLARE @hire_date_years TABLE(hire_date_year NVARCHAR(50)); INSERT INTO @hire_date_years( hire_date_year)SELECT DISTINCTDATEPART(YEAR, Employee.HireDate)FROM HumanResources.Employee;DECLARE @sql_yearlist NVARCHAR(MAX);SELECT @sql_yearlist = ISNULL(@sql_yearlist, '') + ','+ QUOTENAME(hire_date_year) FROM @hire_date_yearsSET @sql_yearlist = STUFF(@sql_yearlist, 1, 1, '')SELECT @sql_yearlist
View Code
示例2 根据唯一值来统计
DECLARE @hire_date_years TABLE(hire_date_year NVARCHAR(50)); DECLARE @sql_yearlist NVARCHAR(MAX); DECLARE @sql_command NVARCHAR(MAX);INSERT INTO @hire_date_years( hire_date_year)SELECT DISTINCTDATEPART(YEAR, Employee.HireDate)FROM HumanResources.Employee;SELECT @sql_yearlist = ISNULL(@sql_yearlist, '') + N','+ QUOTENAME(hire_date_year) FROM @hire_date_yearsSET @sql_yearlist = STUFF(@sql_yearlist, 1, 1, '')SET @sql_command = N' WITH employee_dataAS ( SELECT Employee.BusinessEntityID ,Employee.JobTitle ,DATEPART(YEAR, Employee.HireDate) AS HireDate_YearFROM HumanResources.Employee)SELECT JobTitle,' + @sql_yearlist + N' FROM employee_data PIVOT (COUNT(BusinessEntityID) FOR HireDate_Year IN (' + @sql_yearlist + N')) pivot_data'PRINT @sql_command
View Code
示例3: 写进SP里面
IF OBJECT_ID(N'dbo.job_title_year_summary', 'P') IS NOT NULL BEGINDROP PROCEDURE dbo.job_title_year_summary; ENDSET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GOCREATE PROCEDURE job_title_year_summary AS BEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON;DECLARE @hire_date_years TABLE(hire_date_year NVARCHAR(50));DECLARE @sql_yearlist NVARCHAR(MAX);DECLARE @sql_command NVARCHAR(MAX);INSERT INTO @hire_date_years( hire_date_year)SELECT DISTINCTDATEPART(YEAR, Employee.HireDate)FROM HumanResources.Employee;SELECT @sql_yearlist = ISNULL(@sql_yearlist, '') + N','+ QUOTENAME(hire_date_year)FROM @hire_date_yearsSET @sql_yearlist = STUFF(@sql_yearlist, 1, 1, '')SET @sql_command = N'WITH employee_dataAS ( SELECT Employee.BusinessEntityID ,Employee.JobTitle ,DATEPART(YEAR, Employee.HireDate) AS HireDate_YearFROM HumanResources.Employee)SELECT JobTitle,' + @sql_yearlist + N'FROM employee_dataPIVOT (COUNT(BusinessEntityID) FOR HireDate_Year IN (' + @sql_yearlist + N')) pivot_data'PRINT @sql_command;EXEC sp_executesql @sql_command; END GO
View Code
有了这个存储过程,以后需要用它时,可以用昨时表来存储它的结果,做后一步的处理。
转载于:https://www.cnblogs.com/cdjboy/p/5567760.html
T-SQL Recipes之Customized Database Objects相关推荐
- 【oracle】oracle经典sql,exception,database link纠错
[oracle]oracle经典sql,exception,database link纠错 1111-01 oracle经典sql,exception,database link纠错 1.给表tabl ...
- Failed to load sql modules into the database cluster during PostgreSQL Installation
在安装postgre sql的时候,报Failed to load sql modules into the database cluster during PostgreSQL Installati ...
- mysql备份数据出现mysqldump: Got error: 1049: Unknown database ‘jxgl>jxgl.sql‘ when selecting the database
文章目录 使用mysqldump备份数据出现mysqldump: Got error: 1049: Unknown database 'jxgl>jxgl.sql' when selecting ...
- SQL Server新增Contained Database功能
SQL Server 2012新增的Contained Database是为了解决数据库在不同SQL Server实例之间迁移的问题.在以往的情况下,数据库本身并不包含一些实例级别的配置参数(比如:数 ...
- oracle sql last_value,図でイメージするOracle DatabaseのSQL全集 第3回 分析関数
指定したソートキーでの.最初の行の値を求めるのが.First_Value関数. 指定したソートキーでの.最後の行の値を求めるのが.Last_Value関数. 指定したソートキーでの.(Row_Numb ...
- win7 64 pl/sql developer 不能选择database下来框
解决方案 : http://www.cnblogs.com/ymj126/p/3712727.html
- SharePoint 2010 Form Authentication (SQL) based on existing database
博客地址 http://blog.csdn.net/foxdave SharePoint 2010 表单认证,基于现有数据库的用户信息表 本文主要描述本人配置过程中涉及到的步骤,仅作为参考,不要仅限于 ...
- sql 触发器未触发_学习SQL:SQL触发器
sql 触发器未触发 SQL Triggers are another powerful database object we have at our disposal. In previous ar ...
- 在SQL数据库中搜索对象的不同方法
This article explores various ways to search for database objects in SQL database such as tables, st ...
最新文章
- COM组件转换成.NET组件[转]
- AWS — AWS VPC 虚拟专用云
- java hasfocus_Android·Focus机制解析和常见问题
- Codeforces 797C Minimal string【贪心】
- 深度学习之数据增强方案和TensorFlow操作
- 阿里云贾少天:大规模云服务器高效使用及管理实践
- Qt文档阅读笔记-对Style Plugin Example实例的解析
- html5执行shell,利用nginx执行Shell 脚本
- 运用PhantomJS测试JavaScript
- 产品需求文档写作方法(一)写前准备+梳理需求
- 4. JavaScript Math 对象
- LODOP打印项水平居中
- java 前后端分离_Java项目如何实现前后端分离
- 硅谷录用的计算机专业大学排名,学计算机科学专业,必选硅谷附近的这些加州大学...
- 猪年开年喜报—涛思数据完成 Pre A轮融资
- 可导区间中的唯一驻点一定是极值点吗?
- 自编码器(Auto-encoder)的概念和应用
- 图形化WiFi密码的破解
- 适合开车听的歌 开车必听歌曲排行榜 适合年轻人开车听的歌
- PS中转手绘教程汇总
热门文章
- c++/cli中System::Type::GetType的使用注意事项
- 《X86汇编语言:从实模式到保护模式》读书笔记之引言
- 一切都是对象---JAVA编程思想
- JAVA JDBC详解
- java transient关键字
- 问:一行Python代码到底能干多少事情?(一)
- Hi3516A开发--GV7601 硬件设计
- 【译】Hard Forks, Soft Forks, Defaults and Coercion
- Tensorflow Day16 Autoencoder 實作
- epub阅读器_推荐一款Epub(windows版)阅读软件,附下载安装教程