日期:2014-05-18  浏览次数:20436 次

一个固定行的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 所有动物表 A
LEFT 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 ……