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相关推荐

  1. 【oracle】oracle经典sql,exception,database link纠错

    [oracle]oracle经典sql,exception,database link纠错 1111-01 oracle经典sql,exception,database link纠错 1.给表tabl ...

  2. 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 ...

  3. 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 ...

  4. SQL Server新增Contained Database功能

    SQL Server 2012新增的Contained Database是为了解决数据库在不同SQL Server实例之间迁移的问题.在以往的情况下,数据库本身并不包含一些实例级别的配置参数(比如:数 ...

  5. oracle sql last_value,図でイメージするOracle DatabaseのSQL全集 第3回 分析関数

    指定したソートキーでの.最初の行の値を求めるのが.First_Value関数. 指定したソートキーでの.最後の行の値を求めるのが.Last_Value関数. 指定したソートキーでの.(Row_Numb ...

  6. win7 64 pl/sql developer 不能选择database下来框

    解决方案 : http://www.cnblogs.com/ymj126/p/3712727.html

  7. SharePoint 2010 Form Authentication (SQL) based on existing database

    博客地址 http://blog.csdn.net/foxdave SharePoint 2010 表单认证,基于现有数据库的用户信息表 本文主要描述本人配置过程中涉及到的步骤,仅作为参考,不要仅限于 ...

  8. sql 触发器未触发_学习SQL:SQL触发器

    sql 触发器未触发 SQL Triggers are another powerful database object we have at our disposal. In previous ar ...

  9. 在SQL数据库中搜索对象的不同方法

    This article explores various ways to search for database objects in SQL database such as tables, st ...

最新文章

  1. COM组件转换成.NET组件[转]
  2. AWS — AWS VPC 虚拟专用云
  3. java hasfocus_Android·Focus机制解析和常见问题
  4. Codeforces 797C Minimal string【贪心】
  5. 深度学习之数据增强方案和TensorFlow操作
  6. 阿里云贾少天:大规模云服务器高效使用及管理实践
  7. Qt文档阅读笔记-对Style Plugin Example实例的解析
  8. html5执行shell,利用nginx执行Shell 脚本
  9. 运用PhantomJS测试JavaScript
  10. 产品需求文档写作方法(一)写前准备+梳理需求
  11. 4. JavaScript Math 对象
  12. LODOP打印项水平居中
  13. java 前后端分离_Java项目如何实现前后端分离
  14. 硅谷录用的计算机专业大学排名,学计算机科学专业,必选硅谷附近的这些加州大学...
  15. 猪年开年喜报—涛思数据完成 Pre A轮融资
  16. 可导区间中的唯一驻点一定是极值点吗?
  17. 自编码器(Auto-encoder)的概念和应用
  18. 图形化WiFi密码的破解
  19. 适合开车听的歌 开车必听歌曲排行榜 适合年轻人开车听的歌
  20. PS中转手绘教程汇总

热门文章

  1. c++/cli中System::Type::GetType的使用注意事项
  2. 《X86汇编语言:从实模式到保护模式》读书笔记之引言
  3. 一切都是对象---JAVA编程思想
  4. JAVA JDBC详解
  5. java transient关键字
  6. 问:一行Python代码到底能干多少事情?(一)
  7. Hi3516A开发--GV7601 硬件设计
  8. 【译】Hard Forks, Soft Forks, Defaults and Coercion
  9. Tensorflow Day16 Autoencoder 實作
  10. epub阅读器_推荐一款Epub(windows版)阅读软件,附下载安装教程