Sql Server Pivot行专列

源数据库:
源数据
转换后:
转换后
要点:
1, 如果原数据有多余的列,先剔除。(要实现行转列,就必定有关分组,一组内的才可行转列,否则如果有多余的列,这些列也会自动作为分组条件),结果如下样子:

SELECT t.* FROM  T_partition
PIVOT(COUNT(result) FOR RESULT IN ([胜],[负])) AS t
ORDER BY t.Date

默认其他列也作为分组条件

2,Pivot关键字 FOR 列名,就是按某列执行聚合,可以是Count(),Sum(),AVG()…,是什么就在Pivot后写什么。
这里写图片描述
如果对源数据就进行了聚合查询,再PIVOT就不是想要的结果了:

WITH xx AS(
SELECT Date,Result
FROM dbo.T_partition
GROUP BY Date,Result
)
SELECT t.* FROM  xx
PIVOT(COUNT(result) FOR RESULT IN ([胜],[负])) AS t
ORDER BY t.Date

这里写图片描述

Pivot示例:

INSERT INTO [dbo].[T_partition]
           ([Date]
           ,[Result])
     VALUES
           (DATEADD(MONTH,2, GETDATE()),'胜')
INSERT INTO [dbo].[T_partition]
           ([Date]
           ,[Result])
     VALUES
           (DATEADD(MONTH,2, GETDATE()),'胜')
INSERT INTO [dbo].[T_partition]
           ([Date]
           ,[Result])
     VALUES
          (DATEADD(MONTH,2, GETDATE()),'负')
INSERT INTO [dbo].[T_partition]
           ([Date]
           ,[Result])
     VALUES
          (DATEADD(MONTH,1, GETDATE()),'胜')
INSERT INTO [dbo].[T_partition]
           ([Date]
           ,[Result])
     VALUES
           (DATEADD(MONTH,1, GETDATE()),'负')

WITH xx AS(
SELECT Date,Result
FROM dbo.T_partition
)
SELECT t.* FROM  xx
PIVOT(COUNT(result) FOR RESULT IN ([胜],[负])) AS t
ORDER BY t.Date
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值