zoukankan
html css js c++ java
解决一条特殊的分类统计问题(SQL)
原问题如下:
/**/
/*
table1:
序号 类别
01 玩具
02 食物
table2:
序号 类别 名称 对应编号
01 玩具 大小 A1
02 玩具 面积 A2
03 玩具 体积 A3
04 食物 重量 A7
05 食物 颜色 A9
table3:
序号 物品 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
..
01 皮球 10 20 30
02 篮球 20 30 40
03 苹果 20 50
04 香蕉 80 70
显示效果
对应2种类别
当是玩具类别时候显示
物品 类别 大小 面积 体积
皮球 玩具 10 20 30
篮球 玩具 20 30 40
当是食物类别时候显示
物品 类别 重量 颜色
苹果 食物 20 50
香蕉 食物 80 70
请给出具体的查询过程。。谢谢
*/
自感觉不错的一个解决方法:
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
查看全文
相关阅读:
Node.js 基础介绍
你所不知道该如何回答的面试题(一)
深浅拷贝
CSRF攻击:陌生链接不要随便点
跨站脚本攻击(XSS)
同源策略:为什么XMLHttpRequest不能跨域请求资源?
HTTP/2:如何提升网络速度
HTTP/1:HTTP性能优化
WebComponent:像搭积木一样构建Web应用
winform 保存文件 打开文件 选择文件 字体样式颜色(流 using System.IO;)
原文地址:https://www.cnblogs.com/wghao/p/748964.html
最新文章
ubuntu 16.04安装docker
一段SQL
powershell例子
powershell批量设置权限
powershell使用
git常用命令
shell语法
R语言常用函数
powershell通过wps excel导出csv
前端面试题目
热门文章
页面轮播
ob_start()、ob_end_flush和ob_end_clean()多级缓冲
图片未完成加载显示loading
手机版图片轮播插件
javascript 实现页面加载完的操作
字体自适应
自主适配
js判断手机端和pc端
js模板引擎实现原理
代码校验规范
Copyright © 2011-2022 走看看