sql如何写出excel数据透视表功能

本文介绍如何使用SQL将表格数据转换为数据透视表格式。针对不同版本的SQL Server提供了两种解决方案,包括SQL 2000和SQL 2005的实现方式。通过实例演示了如何将商品名、编号及版本等字段进行聚合展示。

表1
商品名+商品编号+商品版本,3个自段
A 001 revA
B 001 revA
A 002 revA
A 001 revB
B 002 revA
C 001 revB
请问如何用sql显示成如下(类似与excel数据透视表)

商品名 revA revB
A 2 1
B 2 0

CREATE TABLE #t1(
商品名
VARCHAR(20),
商品编号
VARCHAR(20),
商品版本
VARCHAR(20)
)

INSERT INTO #t1
        ( 商品名, 商品编号, 商品版本 )
SELECT
'A' ,'001', 'revA' UNION ALL SELECT
'B' ,'001', 'revA' UNION ALL SELECT
'A' ,'002', 'revA' UNION ALL SELECT
'A' ,'001', 'revB' UNION ALL SELECT
'B' ,'002', 'revA' UNION ALL SELECT
'C' ,'001', 'revB'

--sql 2000
declare @sql varchar(8000)
set @sql = 'select 商品名 '
select @sql = @sql + ' , SUM(case 商品版本 when ''' + 商品版本 + ''' then 1 else 0 end) [' + 商品版本 + ']'
from (select distinct 商品版本 from #t1) as a

set @sql = @sql + ' from #t1 group by 商品名 '
exec(@sql)

--sql2005
SELECT 商品名,
[revA], [revB]
FROM
  (
SELECT 商品名,商品版本 FROM #t1) AS t
PIVOT
--透视操作符
(
count(商品版本)
FOR 商品版本 IN ([revA], [revB])
)
AS PivotTable;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值