一个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)
*/