sql server:Pivot and UNPivot data with date in the columns
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | --行列转换 drop table geovindu create table geovindu (ID int ,ChangeName nvarchar(25),Number1 int ,Number2 int ) insert into geovindu select 1, '购物换领' ,10,1 union all select 1, '积分换领' ,5,3 union all select 1, '购物换领' ,3,2 union all select 2, '购物换领' ,5,3 union all select 2, '积分换领' ,1,2 union all select 2, '积分换领' ,2,2 --- select ID,[购物换领(Number1)],[购物换领(Number2)],[积分换领(Number1)],[积分换领(Number2)] from ( select ID,ChangeName+ '(' +c+ ')' 'c' ,v from ( select ID,ChangeName, sum (Number1) 'Number1' , sum (Number2) 'Number2' from geovindu group by ID,ChangeName) a unpivot(v for c in ([Number1],[Number2])) u) b pivot( max (v) for c in ([购物换领(Number1)],[购物换领(Number2)],[积分换领(Number1)],[积分换领(Number2)])) p go --APPLY 有两种形式:CROSS APPLY 和 OUTER APPLY。CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL。 --Create Employees table and insert values. drop table Employees go CREATE TABLE Employees ( empid int NOT NULL ,mgrid int NULL ,empname varchar (25) NOT NULL ,salary money NOT NULL CONSTRAINT PK_Employees PRIMARY KEY (empid) ); GO INSERT INTO Employees VALUES (1 , NULL , 'Nancy' , $10000.00); INSERT INTO Employees VALUES (2 , 1 , 'Andrew' , $5000.00); INSERT INTO Employees VALUES (3 , 1 , 'Janet' , $5000.00); INSERT INTO Employees VALUES (4 , 1 , 'Margaret' , $5000.00); INSERT INTO Employees VALUES (5 , 2 , 'Steven' , $2500.00); INSERT INTO Employees VALUES (6 , 2 , 'Michael' , $2500.00); INSERT INTO Employees VALUES (7 , 3 , 'Robert' , $2500.00); INSERT INTO Employees VALUES (8 , 3 , 'Laura' , $2500.00); INSERT INTO Employees VALUES (9 , 3 , 'Ann' , $2500.00); INSERT INTO Employees VALUES (10, 4 , 'Ina' , $2500.00); INSERT INTO Employees VALUES (11, 7 , 'David' , $2000.00); INSERT INTO Employees VALUES (12, 7 , 'Ron' , $2000.00); INSERT INTO Employees VALUES (13, 7 , 'Dan' , $2000.00); INSERT INTO Employees VALUES (14, 11 , 'James' , $1500.00); GO --Create Departments table and insert values. drop table Departments go CREATE TABLE Departments ( deptid INT NOT NULL PRIMARY KEY ,deptname VARCHAR (25) NOT NULL ,deptmgrid INT NULL REFERENCES Employees ); GO INSERT INTO Departments VALUES (1, 'HR' , 2); INSERT INTO Departments VALUES (2, 'Marketing' , 7); INSERT INTO Departments VALUES (3, 'Finance' , 8); INSERT INTO Departments VALUES (4, 'R&D' , 9); INSERT INTO Departments VALUES (5, 'Training' , 4); INSERT INTO Departments VALUES (6, 'Gardening' , NULL ); go drop FUNCTION dbo.fn_getsubtree go CREATE FUNCTION dbo.fn_getsubtree(@empid AS INT ) RETURNS @TREE TABLE ( empid INT NOT NULL ,empname VARCHAR (25) NOT NULL ,mgrid INT NULL ,lvl INT NOT NULL ) AS BEGIN WITH Employees_Subtree(empid, empname, mgrid, lvl) AS ( -- Anchor Member (AM) SELECT empid, empname, mgrid, 0 FROM Employees WHERE empid = @empid UNION all -- Recursive Member (RM) SELECT e.empid, e.empname, e.mgrid, es.lvl+1 FROM Employees AS e JOIN Employees_Subtree AS es ON e.mgrid = es.empid ) INSERT INTO @TREE SELECT * FROM Employees_Subtree; RETURN END GO --https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms175156(v=sql.105) --若要返回每个部门经理的各级下属,请使用以下查询。 SELECT D.deptid, D.deptname, D.deptmgrid ,ST.empid, ST.empname, ST.mgrid,ST.lvl FROM Departments AS D CROSS APPLY fn_getsubtree(D.deptmgrid) AS ST; go |
SQL Server 2109安装中遇到脱机安装Microsoft机器学习服务器组件无法下一步的解决方法
https://docs.microsoft.com/zh-cn/sql/machine-learning/install/sql-ml-component-install-without-internet-access?view=sql-server-ver15
把文件名其中的"1033"改為"2052".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | -- --SQL - Pivot data with date in the columns --Dynamic sql 动态 geovindu DECLARE @sql nvarchar( max ) DECLARE @s nvarchar( max ) SELECT @s=STUFF(( SELECT DISTINCT ',[' + CAST ( CAST (RecordAddDate as DATE ) as nvarchar)+ ']' FROM dbo.DuView_RedemptionRecordShopName FOR XML PATH( '' ) ), 1, 1, '' ) SET @sql=N ';WITH cte as (SELECT ShopsName,CAST([RecordAddDate] as DATE) [RecordAddDate],SUM([RecordNumber] ) Val FROM dbo.DuView_RedemptionRecordShopName where ProjectId=1 GROUP BY ShopsName,CAST([RecordAddDate] as DATE)) SELECT * FROM (SELECT [ShopsName],[RecordAddDate],Val FROM cte) as t pivot (MAX(val) FOR [RecordAddDate] in (' +@s+ ')) as p' print(@sql) EXECUTE sp_executesql @sql --https://docs.microsoft.com/en-us/answers/questions/411019/sql-pivot-data-with-date-in-the-columns-azure-sql.html ; WITH cte as ( SELECT ShopsName, CAST ([RecordAddDate] as DATE ) [RecordAddDate], isnull ( SUM ([RecordNumber]),0) Val FROM dbo.DuView_RedemptionRecordShopName where ProjectId=1 GROUP BY ShopsName, CAST ([RecordAddDate] as DATE )) SELECT * FROM ( SELECT [ShopsName],[RecordAddDate], isnull (Val,0) Val FROM cte) as t pivot ( MAX (val) FOR [RecordAddDate] in ([2021-08-03],[2021-08-04],[2021-08-05],[2021-08-06],[2021-08-07],[2021-08-10],[2021-08-11],[2021-08-12],[2021-08-13],[2021-08-14],[2021-08-21],[2021-08-23],[2021-08-26],[2021-08-29],[2021-09-03],[2021-09-04],[2021-09-06],[2021-10-02],[2021-10-06],[2021-10-07],[2021-10-10],[2021-10-14],[2021-10-17],[2021-10-23],[2021-10-29],[2021-10-30])) as p go -- ; WITH cte as ( SELECT ShopsName,RecordChangeCode, CAST ([RecordAddDate] as DATE ) [RecordAddDate], isnull ( SUM ([RecordNumber]),0) Val FROM dbo.DuView_RedemptionRecordShopName where ProjectId=1 GROUP BY ShopsName,RecordChangeCode, CAST ([RecordAddDate] as DATE )) SELECT * FROM ( SELECT [ShopsName],RecordChangeCode,[RecordAddDate], isnull (Val,0) Val FROM cte) as t pivot ( MAX (val) FOR [RecordAddDate] in ([2021-08-03],[2021-08-04],[2021-08-05],[2021-08-06],[2021-08-07],[2021-08-10],[2021-08-11],[2021-08-12],[2021-08-13],[2021-08-14],[2021-08-21],[2021-08-23],[2021-08-26],[2021-08-29],[2021-09-03],[2021-09-04],[2021-09-06],[2021-10-02],[2021-10-06],[2021-10-07],[2021-10-10],[2021-10-14],[2021-10-17],[2021-10-23],[2021-10-29],[2021-10-30])) as p go |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | CREATE TABLE geovindu_sales ( product_name VARCHAR (100), store_location VARCHAR (50), num_sales INT ); INSERT INTO geovindu_sales (product_name, store_location, num_sales) VALUES ( 'Chair' , 'North' , 55), ( 'Desk' , 'Central' , 120), ( 'Couch' , 'Central' , 78), ( 'Chair' , 'South' , 23), ( 'Chair' , 'South' , 10), ( 'Chair' , 'North' , 98), ( 'Desk' , 'West' , 61), ( 'Couch' , 'North' , 180), ( 'Chair' , 'South' , 14), ( 'Desk' , 'North' , 45), ( 'Chair' , 'North' , 87), ( 'Chair' , 'Central' , 34), ( 'Desk' , 'South' , 42), ( 'Couch' , 'West' , 58), ( 'Couch' , 'Central' , 27), ( 'Chair' , 'South' , 91), ( 'Chair' , 'West' , 82), ( 'Chair' , 'North' , 37), ( 'Desk' , 'North' , 68), ( 'Couch' , 'Central' , 54), ( 'Chair' , 'South' , 81), ( 'Desk' , 'North' , 25), ( 'Chair' , 'North' , 46), ( 'Chair' , 'Central' , 121), ( 'Desk' , 'South' , 85), ( 'Couch' , 'North' , 43), ( 'Desk' , 'West' , 10), ( 'Chair' , 'North' , 5), ( 'Chair' , 'Central' , 16), ( 'Desk' , 'South' , 9), ( 'Couch' , 'West' , 22), ( 'Couch' , 'Central' , 59), ( 'Chair' , 'South' , 76), ( 'Chair' , 'West' , 48), ( 'Chair' , 'North' , 19), ( 'Desk' , 'North' , 3), ( 'Couch' , 'West' , 63), ( 'Chair' , 'South' , 81), ( 'Desk' , 'North' , 85), ( 'Chair' , 'North' , 90), ( 'Chair' , 'Central' , 47), ( 'Desk' , 'West' , 63), ( 'Couch' , 'North' , 28); SELECT * FROM geovindu_sales; --- SELECT product_name, ISNULL (North,0) North, ISNULL (Central,0) Central, ISNULL (South,0) South, ISNULL (West,0) West FROM ( SELECT product_name, store_location, ISNULL (num_sales,0) AS num_sales FROM geovindu_sales ) AS alias_for_select PIVOT ( SUM (num_sales) FOR store_location IN (North, Central, South, West) ) AS pivot_table; GO --动态SQL DECLARE @cols AS NVARCHAR( MAX ), @query AS NVARCHAR( MAX ); SET @cols = STUFF(( SELECT distinct ',' + QUOTENAME(store_location) FROM geovindu_sales FOR XML PATH( '' ), TYPE ).value( '.' , 'NVARCHAR(MAX)' ) ,1,1, '' ); PRINT(@cols) SET @query = 'SELECT product_name, ' + @cols + ' FROM ( SELECT product_name, store_location, num_sales FROM geovindu_sales ) AS alias_for_select PIVOT ( SUM(num_sales) FOR store_location IN (' + @cols + ') ) AS pivot_table ' ; PRINT(@query) EXECUTE (@query); GO drop table geovindu_sales go --SQL Server UNPIVOT CREATE TABLE geovindu_sales_pivoted ( product_name VARCHAR (100), north INT , central INT , south INT , west INT ); INSERT INTO geovindu_sales_pivoted (product_name, north, central, south, west) VALUES ( 'Chair' , 437, 218, 376, 130), ( 'Couch' , 251, 218, NULL , 143), ( 'Desk' , 226, 120, 136, 134); SELECT product_name, store_location, num_sales FROM ( SELECT product_name, north, central, south, west FROM geovindu_sales_pivoted ) AS pivoted_table UNPIVOT ( num_sales FOR store_location IN (north, central, south, west) ) AS unpivot_table; go drop table geovindu_sales_pivoted go |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | -- SELECT RecordAddDate,DATEPART(WW,RecordAddDate) as '一年内的第几周' FROM dbo.DuView_RedemptionRecordShopName go --第周计算 DECLARE @sql nvarchar( max ) DECLARE @s nvarchar( max ) Declare @ProjectId int declare @GiftsId int set @ProjectId=1 set @GiftsId=2 SELECT @s=STUFF(( SELECT DISTINCT ',[' + CAST (DATEPART(WW,RecordAddDate) as nvarchar)+ ']' FROM dbo.DuView_RedemptionRecordShopName FOR XML PATH( '' ) ), 1, 1, '' ) SET @sql=N ';WITH cte as (SELECT GiftsName,RecordChangeCode,DATEPART(WW,RecordAddDate) [RecordAddDate],SUM([RecordNumber] ) Val FROM dbo.DuView_RedemptionRecordShopName where ProjectId=' + cast (@ProjectId as nvarchar)+ ' and GiftsId=' + cast (@GiftsId as nvarchar)+ ' GROUP BY GiftsName,RecordChangeCode,DATEPART(WW,RecordAddDate)) SELECT * FROM (SELECT [GiftsName],[RecordChangeCode],[RecordAddDate],Val FROM cte) as t pivot (MAX(val) FOR [RecordAddDate] in (' +@s+ ')) as p' print(@sql) EXECUTE sp_executesql @sql go --geovindu DECLARE @sql nvarchar( max ) DECLARE @s nvarchar( max ) Declare @ProjectId int declare @GiftsId int set @ProjectId=1 set @GiftsId=1 SELECT @s=STUFF(( SELECT DISTINCT ',[' + CAST (DATEPART(WW,RecordAddDate) as nvarchar)+ ']' FROM dbo.DuView_RedemptionRecordShopName FOR XML PATH( '' ) ), 1, 1, '' ) SET @sql=N ';WITH cte as (SELECT GiftsName,RecordChangeCode,DATEPART(WW,RecordAddDate) [RecordAddDate],SUM([RecordNumber] ) Val FROM dbo.DuView_RedemptionRecordShopName where ProjectId=' + cast (@ProjectId as nvarchar)+ ' and GiftsId=' + cast (@GiftsId as nvarchar)+ ' GROUP BY GiftsName,RecordChangeCode,DATEPART(WW,RecordAddDate)) SELECT * FROM (SELECT [GiftsName],[RecordChangeCode],[RecordAddDate],Val FROM cte) as t pivot (MAX(val) FOR [RecordAddDate] in (' +@s+ ')) as p' print(@sql) EXECUTE sp_executesql @sql go |
1 2 3 4 5 6 | ; WITH cte as ( SELECT GiftsName,RecordChangeCode,DATEPART(WW,RecordAddDate) [RecordAddDate], SUM ([RecordNumber] ) Val FROM dbo.DuView_RedemptionRecordShopName where ProjectId=1 and GiftsId=1 GROUP BY GiftsName,RecordChangeCode,DATEPART(WW,RecordAddDate)) SELECT * FROM ( SELECT [GiftsName],[RecordChangeCode],[RecordAddDate],Val FROM cte) as t pivot ( MAX (val) FOR [RecordAddDate] in ([32],[33],[34],[35],[36],[37],[40],[41],[42],[43],[44])) as p |
Sql Server DATEPART()函数:
DATEPART()函数用于返回日期 / 时间的单独部分,比如年、月、日、小时、分钟等等
语法:
DATEPART(datepart,date)
date参数是合法的日期表达式。datepart 参数可以是下列的值:
datepart | 缩写 |
---|---|
年 | yy, yyyy |
季度 | qq, q |
月 | mm, m |
年中的日 | dy, y |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小时 | hh |
分钟 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
纳秒 | ns |
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
分类:
数据库编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2015-07-07 csharp: DataTable Rename ColumnName and remove Column
2009-07-07 gb2312简繁转换js兼容各种浏览器