读书人

一个固定行的SQL有关问题

发布时间: 2012-04-23 13:17:38 作者: rapoo

一个固定行的SQL问题
问题描述如下:
1. 现假定, 每种[动物] 有四种固定属性 [头],[脚],[体],[毛], 都以数字描述
2. 数据库中存储如下
动物 属性 值
狗 头 20
狗 毛 50
猫 脚 10
3. 需要得到的结果如下
动物 属性 值
狗 头 20
狗 脚 0
狗 体 0
狗 毛 50
猫 头 0
猫 脚 10
猫 体 0
猫 毛 0
即不管数据库有没有存储这个属性, 针对一个动物, 就要能显示4种属性, 没有存储的置为0


可用表:
1. 动物属性表
动物 属性 值
狗 头 20
狗 毛 50
猫 脚 10
2. 所有动物表
动物





谢谢各位了!

[解决办法]

SQL code
--这样??SELECT A.动物,MAX(CASE WHEN B.属性 = '头' THEN B.值 ELSE 0 END) AS '头',MAX(CASE WHEN B.属性 = '脚' THEN B.值 ELSE 0 END) AS '脚',MAX(CASE WHEN B.属性 = '毛' THEN B.值 ELSE 0 END) AS '毛',MAX(CASE WHEN B.属性 = '体' THEN B.值 ELSE 0 END) AS '体'FROM 所有动物表 ALEFT JOIN 动物属性表 B ON A.动物 = B.动物GROUP BY A.动物
[解决办法]
不知道是不是误会了你的意思。 我乱写个你看看。 再补充说明下

creat table dongwu(id int,mingzi varchar(255),tou varchar(255),jiao varchar(255),ti varchar(255),mao varchar(255))

insert into dongwu(mingzi,tou,jiao,ti,mao) values('狗',20,0,0,0)
insert into dongwu(mingzi,tou,jiao,ti,mao) values('猫',0,10,0,0)
insert into dongwu(mingzi,tou,jiao,ti,mao) values('鸟',0,0,5,0)


select * from dongwu order by id desc


????


[解决办法]
SQL code
 
-- 建表
create table dongwu(dwn varchar(50));
insert into dongwu values('猫');
insert into dongwu values('狗');
insert into dongwu values('鸟');
create table dongwusx(dwn varchar(50), dws varchar(50), dwz int);
insert into dongwusx values('狗','头',20);
insert into dongwusx values('狗','毛',50);
insert into dongwusx values('猫','脚',10);

-- 查询
select a.dwn, b.dws, dwz=isnull(c.dwz,0) from dongwu a
left join(
select dws = '头'
union
select dws = '毛'
union
select dws = '脚'
union
select dws = '体'
) b on 1=1
left join dongwusx c on a.dwn = c.dwn and b.dws=c.dws
--结果
猫脚10
猫毛0
猫体0
猫头0
狗脚0
狗毛50
狗体0
狗头20
鸟脚0
鸟毛0
鸟体0
鸟头0


[解决办法]
探讨

引用:

SQL code
--这样??
SELECT A.动物,
MAX(CASE WHEN B.属性 = '头' THEN B.值 ELSE 0 END) AS '头',
MAX(CASE WHEN B.属性 = '脚' THEN B.值 ELSE 0 END) AS '脚',
MAX(CASE WHEN B.属性 = '毛' THEN B.值 ELSE 0 ……

读书人网 >SQL Server

热点推荐