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

求一条SQL语句,比较复杂,该如何处理

2012-01-20 
求一条SQL语句,比较复杂table1:序号类别01玩具02食物table2:序号类别名称对应编号01玩具大小A102玩具面积A

求一条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 @sql nvarchar(4000)
set @sql= 'select 物品, ' '玩具 ' ' as 类别, '
select @sql=@sql+对应编号+ ' as '+名称+ ', '
from B where 类别= '玩具 '
set @sql=left(@sql, len(@sql)-1)
set @sql=@sql+ ' from C '
print @sql

select 物品, '玩具 ' as 类别,A1 as 大小,A2 as 面积,A3 as 体积 from C
[解决办法]
table1:
序号 类别
01 玩具
02 食物
table2:
名称 对应编号
大小 A1
面积 A2
体积 A3
重量 A7
颜色 A9
table3:
序号 物品 类别 
01 皮球 01
02 篮球 01

table4:
物品序号 属性 属性值
01 A1 10
01 A2 20
01 A3 30
02 A1 20
02 A1 30


[解决办法]
不是很难,难点就是怎么样构造SQL语句而已,楼主可以参考以下方法(这里借用lzhcxc(天道酬勤)兄弟的插入语句):
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
*/

热点排行