首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

分类的一个统计解决办法

2012-01-05 
分类的一个统计表AA记录ID名称类型属性AIDTheNameTheTypepro1名称1电器属性12名称2日用属性23名称3珠宝属

分类的一个统计
表AA
记录ID       名称           类型           属性
AID             TheName     TheType       pro
1                 名称1         电器           属性1
2                 名称2         日用           属性2
3                 名称3         珠宝           属性3
4                 名称2         日用           属性4
5                 名称5         电器           属性5
6                 名称3         珠宝           属性1
7                 名称3         珠宝           属性3
...   ...   ...
名称在记录中会重复,类型跟随名称,属性有多种,属性不跟随名称。
怎么写语句统计出:
类型   名称     属性1     属性2     属性3     属性4     属性5
电器   名称1     1             0               0             0           0
电器   名称5     0             0               0             0           1
日用   名称2     0             1               0             1           0
珠宝   名称3     1             0               2             0           0
...   ...   ...

[解决办法]
等老大们来。
[解决办法]
帮顶。
[解决办法]
楼主的信誉值是101啊,怎么整的?
[解决办法]
create table 表AA(AID int, TheName nvarchar(20), TheType nvarchar(10), pro nvarchar(10))
insert 表AA
select 1 , N '名称1 ', N '电器 ' , N '属性1 '
union select 2 , N '名称2 ' , N '日用 ' , N '属性2 '
union select 3 , N '名称3 ' , N '珠宝 ' , N '属性3 '
union select 4 , N '名称2 ' , N '日用 ' , N '属性4 '
union select 5 , N '名称5 ' , N '电器 ' , N '属性5 '
union select 6 , N '名称3 ' , N '珠宝 ' , N '属性1 '
union select 7 , N '名称3 ' , N '珠宝 ' , N '属性3 '


Declare @STR NVarchar(4000)

Select @STR = ' Select TheType,TheName '
Select @STR = @STR + N ',SUM(Case pro When N ' ' ' + pro + ' ' ' Then 1 Else 0 End) As ' + pro
From 表AA
print @str
Select @STR = @STR + ' From 表AA Group By TheType,TheName '

EXEC(@STR)
------解决方案--------------------


Create Table AA(AID Int,TheName Nvarchar(10), TheType Nvarchar(10), pro Nvarchar(10))
Insert AA Select 1, N '名称1 ', N '电器 ', N '属性1 '
Union All Select 2, N '名称2 ', N '日用 ', N '属性2 '
Union All Select 3, N '名称3 ', N '珠宝 ', N '属性3 '
Union All Select 4, N '名称2 ', N '日用 ', N '属性4 '
Union All Select 5, N '名称5 ', N '电器 ', N '属性5 '
Union All Select 6, N '名称3 ', N '珠宝 ', N '属性1 '
Union All Select 7, N '名称3 ', N '珠宝 ', N '属性3 '
GO
--如果属性是固定的
Select
TheType,
TheName,
SUM(Case pro When N '属性1 ' Then 1 Else 0 End) As 属性1,
SUM(Case pro When N '属性2 ' Then 1 Else 0 End) As 属性2,
SUM(Case pro When N '属性3 ' Then 1 Else 0 End) As 属性3,
SUM(Case pro When N '属性4 ' Then 1 Else 0 End) As 属性4,
SUM(Case pro When N '属性5 ' Then 1 Else 0 End) As 属性5
From
AA
Group By
TheType,
TheName
Order By
TheType,
TheName

--如果属性不是固定的
Declare @S NVarchar(4000)
Select @S = ' Select TheType, TheName '
Select @S = @S + N ',SUM(Case pro When N ' ' ' + pro + ' ' ' Then 1 Else 0 End) As ' + pro
From AA Group By pro
Select @S = @S + ' From AA Group By TheType, TheName Order By TheType, TheName '
EXEC(@S)
GO
Drop Table AA
--Result
/*
TheTypeTheName属性1属性2属性3属性4属性5
日用名称201010
珠宝名称310200
电器名称110000
电器名称500001
*/
[解决办法]
更正
create table AA
(
AID int identity(1,1),
TheName varchar(5),
TheType varchar(5),
pro varchar(5)
)
insert into AA
select '名称1 ', '电器 ', '属性1 ' union all
select '名称2 ', '日用 ', '属性2 ' union all
select '名称3 ', '珠宝 ', '属性3 ' union all
select '名称2 ', '日用 ', '属性4 ' union all
select '名称5 ', '电器 ', '属性5 ' union all
select '名称3 ', '珠宝 ', '属性1 ' union all
select '名称3 ', '珠宝 ', '属性3 '
go
select * from AA
declare @sql varchar(500)
set @sql= 'select TheType,TheName '
select @sql=@sql+ ', sum(case pro when ' ' '+pro+ ' ' ' then 1 else 0 end) as '+pro
from (select distinct pro from AA) tb
set @sql=@sql+ ' from aa group by TheType,TheName '
exec(@sql)

热点排行
Bad Request.