日期:2014-05-19  浏览次数:20469 次

请教一句SQL,谢谢!
表一如下:
ID         ProName         NUM         ProColor         ProSize
1               产品             1               黑                   1001
2               产品             1               白                   1002
表二如下:
ID             Size
1001           S
1002           M
1003           L

要求输出:
ProName         ProColor         S         M         L
产品                   黑               1         0         0
产品                   白               0         1         0

------解决方案--------------------
declare @t1 table(ID int, ProName varchar(10),NUM int ,ProColor varchar(20), ProSize varchar(10))
insert into @t1 select 1, '产品 ',1, '黑 ', '1001 '
union all select 2, '产品 ',1, '白 ', '1002 '

declare @t2 table(ID varchar(10),Size varchar(5))
insert into @t2 select '1001 ', 'S '
union all select '1002 ', 'M '
union all select '1003 ', 'L '

select * from
(
select ProName,ProColor,Size from @t1 a right join @t2 b
on a.ProSize=b.ID
)tb
pivot
(count(size)
for size in ([S],[M],[L])
)as pit
where ProName is not null
order by ProColor desc

/*
ProName ProColor S M L
---------- -------------------- ----------- ----------- -----------
产品 黑 1 0 0
产品 白 0 1 0

(2 行受影响)

*/
------解决方案--------------------
if object_id( 'pubs..表一 ') is not null
drop table 表一
go

create table 表一(ID int,ProName varchar(10),NUM int,ProColor varchar(10),ProSize int)
insert into 表一(ID,ProName,NUM,ProColor,ProSize) values(1, '产品 ',1, '黑 ', '1001 ')
insert into 表一(ID,ProName,NUM,ProColor,ProSize) values(2, '产品 ',1, '白 ', '1002 ')
if object_id( 'pubs..表二 ') is not null
drop table 表二
go

create table 表二(ID int,Size varchar(10))
insert into 表二(ID,Size) values(1001, 'S ')
insert into 表二(ID,Size) values(1002, 'M ')
insert into 表二(ID,Size) values(1003, 'L ')

select proname , procolor ,
(case when size = 'S ' then 1 else 0 end) as S,
(case when size = 'M ' then 1 else 0 end) as M,
(case when size = 'L ' then 1 else 0 end) as L
from
(
select a.proname,a.procolor,b.size from 表一 a,表二 b where a.prosize = b.id
) t

drop table 表一,表二
/*
proname procolor S M L
---------- ------