您的位置:首页 > 数据库

解决一条特殊的分类统计问题(SQL)

2007-05-16 18:33 330 查看
原问题如下:

create table A(序号 nvarchar(10),类别 nvarchar(10))
insert A select '01', '玩具'
union all select '02', '食物'

create table B(序号 nvarchar(10), 类别 nvarchar(10), 名称 nvarchar(10), 对应编号 nvarchar(10))
insert B select '01', '玩具', '大小', 'A1'
union all select '02', '玩具', '面积', 'A2'
union all select '03', '玩具', '体积', 'A3'
union all select '04', '食物', '重量', 'A7'
union all select '05', '食物', '颜色', 'A9'
create table C(序号 nvarchar(10), 物品 nvarchar(10), A1 int, A2 int, A3 int, A4 int, A5 int, A6 int, A7 int, A8 int, A9 int, A10 int)
insert C(序号, 物品, A1, A2, A3) values('01','皮球',10,20,30)
insert C(序号, 物品, A1, A2, A3) values('02','篮球',20,30,40)
insert C(序号, 物品, A7, A9) values('03','苹果',20,50)
insert C(序号, 物品, A7, A9) values('04','香蕉',80,70)

DECLARE @Input nvarchar(10) --要统计的类别,可以根据实际需要输入
DECLARE @EXECUTE_SQL nvarchar(4000)
DECLARE @EXECUTE_WHERE nvarchar(4000)

SELECT @Input='食物',@EXECUTE_SQL='SELECT [物品],'''+@Input +''' AS [类别]',@EXECUTE_WHERE=' WHERE 1=1'

SELECT @EXECUTE_SQL=@EXECUTE_SQL+',SUM('+[对应编号]+') AS ['+[名称]+']'
,@EXECUTE_WHERE=@EXECUTE_WHERE+' AND '+[对应编号]+' IS NOT NULL'
FROM B WHERE B.[类别]=@Input
SET @EXECUTE_SQL=@EXECUTE_SQL+' FROM C '+@EXECUTE_WHERE+' GROUP BY [物品] '
EXECUTE( @EXECUTE_SQL)
DROP TABLE A,B,C
/**//*
物品 类别 大小 面积 体积
皮球 玩具 10 20 30
篮球 玩具 20 30 40

当是食物类别时候显示
物品 类别 重量 颜色
苹果 食物 20 50
香蕉 食物 80 70
*/
不是很难,要说难点就是怎么样构造SQL语句而已。
原帖:http://community.csdn.net/Expert/topic/5535/5535330.xml?temp=.8875543
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐