日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

T-SQL Recipes之Customized Database Objects

發布時間:2025/3/15 数据库 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。