分类的一个统计
表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)