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

一个SQL查询语句有关问题?

2012-01-15 
一个SQL查询语句问题????IDTypeNameOrderA12801A12901A12红色2A34731A34801A34901A34黑色2A501001A501101A

一个SQL查询语句问题????
ID                     TypeName             Order
A12                       80                         1
A12                       90                         1
A12                       红色                     2
A34                       73                         1
A34                       80                         1
A34                       90                         1
A34                       黑色                     2
A50                       100                       1
A50                       110                       1
A50                       蓝色                     2
A50                       粉红                     2

要求:查询结果如下:
ID               颜色             '73 '           '80 '         '90 '         '100 '         '110 '
A12             红色               NULL           80             90             NULL           NULL
A34             黑色               73               80             90             NULL           NULL
A50             蓝色               NULL           NULL         NULL         100             110
A50             粉红               NULL           NULL         NULL         100             110

备注:TypeName列的 "数字 "是尺码意思....
现有代码:
select   fchrItemID,  
              颜色=max(case   ftinOrder   when   '2 '   then   fchrAnalysisName   end),


              '73 '=max(case   fchrAnalysisName   when   '73 '   then   fchrAnalysisName   end),
              '80 '=max(case   fchrAnalysisName   when   '80 '   then   fchrAnalysisName   end),
              '90 '=max(case   fchrAnalysisName   when   '90 '   then   fchrAnalysisName   end),
              '100 '=max(case   fchrAnalysisName   when   '100 '   then   fchrAnalysisName   end),
'110 '=max(case   fchrAnalysisName   when   '110 '   then   fchrAnalysisName   end),
'120 '=max(case   fchrAnalysisName   when   '120 '   then   fchrAnalysisName   end),
'130 '=max(case   fchrAnalysisName   when   '130 '   then   fchrAnalysisName   end),
'140 '=max(case   fchrAnalysisName   when   '140 '   then   fchrAnalysisName   end),
'150 '=max(case   fchrAnalysisName   when   '150 '   then   fchrAnalysisName   end),
'160 '=max(case   fchrAnalysisName   when   '160 '   then   fchrAnalysisName   end)
from   ItemAllotAnalysis
group   by   fchrItemID
以上代码的问题在:当有一个ID出现两个颜色的时候...查询结果只会显示一个颜色

请问是如何解决?十分感谢


[解决办法]
--建立测试环境
create table tb(id varchar(10),TypeName varchar(5),[order] int)
insert tb(id,TypeName,[order])
select 'A12 ', '80 ', '1 ' union all
select 'A12 ', '90 ', '1 ' union all
select 'A12 ', '红色 ', '2 ' union all
select 'A34 ', '73 ', '1 ' union all
select 'A34 ', '80 ', '1 ' union all
select 'A34 ', '90 ', '1 ' union all
select 'A34 ', '黑色 ', '2 ' union all
select 'A50 ', '100 ', '1 ' union all
select 'A50 ', '110 ', '1 ' union all
select 'A50 ', '蓝色 ', '2 ' union all
select 'A50 ', '粉红 ', '2 '
go
--执行测试语句
select a.id,a.TypeName,
'73 '=max(case b.typename when '73 ' then b.typename end),
'80 '=max(case b.typename when '80 ' then b.typename end),
'90 '=max(case b.typename when '90 ' then b.typename end),
'100 '=max(case b.typename when '100 ' then b.typename end),
'110 '=max(case b.typename when '110 ' then b.typename end),
'120 '=max(case b.typename when '120 ' then b.typename end),
'130 '=max(case b.typename when '130 ' then b.typename end),
'140 '=max(case b.typename when '140 ' then b.typename end),
'150 '=max(case b.typename when '150 ' then b.typename end),
'160 '=max(case b.typename when '160 ' then b.typename end)
from tb a
join tb b on a.id = b.id
where a.[order] = 2 and b.[order] = 1
group by a.id,a.TypeName
order by a.id,a.TypeName

go
--删除测试环境
drop table tb
go
/*--测试结果
id TypeName 73 80 90 100 110 120 130 140 150 160
---------- -------- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----


A12 红色 NULL 80 90 NULL NULL NULL NULL NULL NULL NULL
A34 黑色 73 80 90 NULL NULL NULL NULL NULL NULL NULL
A50 粉红 NULL NULL NULL 100 110 NULL NULL NULL NULL NULL
A50 蓝色 NULL NULL NULL 100 110 NULL NULL NULL NULL NULL

(4 row(s) affected)
*/

热点排行