表A
编号 前缀 单号 类型
9084 090 00001083 1
9085 090 00001094 1
4958 100 00001105 2
4959 100 10010061 2
4251 112 11211261 3
4252 112 11311361 3 如何得到如下结果
类型 090 100 112
1 2 0 0
2 0 2 0
3 0 0 2
编号 前缀 单号 类型
9084 090 00001083 1
9085 090 00001094 1
4958 100 00001105 2
4959 100 10010061 2
4251 112 11211261 3
4252 112 11311361 3 如何得到如下结果
类型 090 100 112
1 2 0 0
2 0 2 0
3 0 0 2
select count(类型) from 表A group by 类型
编号 前缀 单号 类型
1 090 00001083 1
2 090 00001094 1
3 100 00001105 1
4 100 00001106 2
5 100 10010066 2
6 100 00001106 2
7 100 10010064 3
8 112 11211261 3
9 112 11311363 3
10 112 11211266 2
11 112 11311367 3
12 112 11211221 3
13 112 11311461 1如何得到如下结果
类型 090 100 112
1 2 1 1
2 0 3 1
3 0 1 2select count(类型) from 表A group by 类型
无列名
4
4
5
GO
SET ANSI_NULLS OFF
GOdeclare @sql varchar(1000),@colName varchar(10)create table #temp(类型 int)
insert into #temp(类型)
select 类型 from 表A GROUP BY 类型 ORDER BY 类型 ASC
declare cur cursor for select 前缀 from 表A GROUP BY 前缀
open cur
FETCH NEXT FROM cur INTO @colName
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql='ALTER TABLE #Temp ADD COLUMN ['+@colName+'] varchar(10)'
exec(@sql)
SET @sql='UPDATE #Temp SET ['+@colName+']=b.BillCount FROM #Temp a JOIN (SELECT 类型,前缀,COUNT(单号) AS BillCount FROM 表A GROUP BY 类型,前缀)b ON a.类型=b.类型 AND b.前缀="'+@colName+'"'
exec(@sql)
FETCH NEXT FROM cur INTO @colName
END
CLOSE cur
DEALLOCATE cur
SELECT * FROM #temp ORDER BY 类型 ASC
create table 表A
(
编号 int identity(1,1),
前缀 char(3),
单号 char(8),
类型 int
)
GO
insert into 表A values('090','00001083',1)
insert into 表A values('090','00001084',1)
insert into 表A values('100','00001085',1)
insert into 表A values('100','00001086',1)
insert into 表A values('100','00001087',2)
insert into 表A values('100','00001088',2)
insert into 表A values('100','00001089',3)
insert into 表A values('112','00001011',2)
insert into 表A values('112','00001012',3)
insert into 表A values('112','00001013',2)
insert into 表A values('112','00001014',2)
insert into 表A values('112','00001015',3)
insert into 表A values('112','00001016',3)
insert into 表A values('112','00001017',1)SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO declare @sql varchar(1000),@colName varchar(10) create table #temp(类型 int)
insert into #temp(类型)
select 类型 from 表A GROUP BY 类型 ORDER BY 类型 ASC
declare cur cursor for select 前缀 from 表A GROUP BY 前缀
open cur
FETCH NEXT FROM cur INTO @colName
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql='ALTER TABLE #Temp ADD COLUMN ['+@colName+'] varchar(10)'
exec(@sql)
SET @sql='UPDATE #Temp SET ['+@colName+']=b.BillCount FROM #Temp a JOIN (SELECT 类型,前缀,COUNT(单号) AS BillCount FROM 表A GROUP BY 类型,前缀)b ON a.类型=b.类型 AND b.前缀="'+@colName+'"'
exec(@sql)
FETCH NEXT FROM cur INTO @colName
END
CLOSE cur
DEALLOCATE cur
SELECT * FROM #temp ORDER BY 类型 ASC
drop table #temp
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'COLUMN' 附近有语法错误。
服务器: 消息 207,级别 16,状态 1,行 1
列名 '090' 无效。
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'COLUMN' 附近有语法错误。
服务器: 消息 207,级别 16,状态 1,行 1
列名 '100' 无效。
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'COLUMN' 附近有语法错误。
服务器: 消息 207,级别 16,
我的帖子里应该是你要的
GO
SET ANSI_NULLS OFF
GOdeclare @sql varchar(1000),@colName varchar(10)create table #temp(类型 int)
insert into #temp(类型)
select 类型 from 表A GROUP BY 类型 ORDER BY 类型 ASC
declare cur cursor for select 前缀 from 表A GROUP BY 前缀
open cur
FETCH NEXT FROM cur INTO @colName
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql='ALTER TABLE #Temp ADD ['+@colName+'] INT DEFAULT(0)'
exec(@sql)
SET @sql='UPDATE #Temp SET ['+@colName+']=b.BillCount FROM #Temp a JOIN (SELECT 类型,前缀,COUNT(单号) AS BillCount FROM 表A GROUP BY 类型,前缀)b ON a.类型=b.类型 AND b.前缀="'+@colName+'"'
exec(@sql)
FETCH NEXT FROM cur INTO @colName
END
CLOSE cur
DEALLOCATE cur
SELECT * FROM #temp ORDER BY 类型 ASC
drop table #temp