解决一条特殊的分类统计问题(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
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
相关文章推荐
- SQL反模式笔记17——用一条sql解决复杂问题
- 一条sql语句引发mysql不停创建临时表的问题解决..coping to tmp table on desk
- SQL 传入特殊符号 单引号 ' 导致的问题及解决办法
- 解决X64操作系统PL/SQL连接报错问题 make sure you have the 32 bits oracle client installed 分类: PlSql 2012-05-20 1
- 只要关系配置正确,一条sql就可以解决循环中查询数据库的问题
- 如何解决在.Net中用Sql语句向SqlServer数据库中插入特殊字符失败的问题?
- mysql5.7中的一个update order by排名问题解决办法(一条sql搞定排名)
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
- 关于执行Oracle下Sql语句中遇到的特殊字符问题解决办法。
- 一条语句简单解决“每个Y的最新X”的SQL经典问题
- 如何解决java.sql.Statement无法处理特殊字符以及容易被黑问题
- 一次ORA-4030问题诊断及解决【解决思路不错,说明了对象的统计信息与优化器的优化操作(即选择执行一个SQL语句在该优化参数环境下最佳的执行计划)间的关系】
- 用sql解决一个人口统计的问题
- 一条语句简单解决“每个Y的最新X”的SQL经典问题
- SQL统计数量,查询多列问题解决,(因为该列没有包含在聚合函数或 GROUP BY 子句中。)
- [导入][转]一条语句简单解决“每个Y的最新X”的SQL经典问题
- 用分类汇总的功能解决无序数据的统计问题
- 解决动态生成的SQL中特殊字符的问题 QuotedStr function
- 分类统计的SQL,你可能没有用过
- [原]有关Caffe训练好的模型在Python接口下使用分类不准确的问题解决