我要统计近4个星期所有车型(包括没有销售记录的)的销售数据,每个星期的数据格式如下:
(假设GL1 -- GL4就是所有的车型了)
车型 黑 白 红 绿 合计
GL1 1 1 2 0 4
GL2 0 2 1 0 3
GL3 0 2 2 1 5
GL4 2 0 0 0 2这样两个星期的横向连接就型如:(车型列重复)
车型 黑 白 红 绿 合计车型 黑 白 红 绿 合计
GL1 1 1 2 0 4 GL1 0 2 2 1 5
GL2 0 2 1 0 3 GL2 1 0 1 0 2
GL3 0 2 2 1 5 GL3 0 1 0 0 1
GL4 2 0 0 0 2 GL4 1 3 0 0 4而车的颜色是动态生成的,不一定是黑,白,红,绿...那么,我怎么去掉其他星期的车型列???
(假设GL1 -- GL4就是所有的车型了)
车型 黑 白 红 绿 合计
GL1 1 1 2 0 4
GL2 0 2 1 0 3
GL3 0 2 2 1 5
GL4 2 0 0 0 2这样两个星期的横向连接就型如:(车型列重复)
车型 黑 白 红 绿 合计车型 黑 白 红 绿 合计
GL1 1 1 2 0 4 GL1 0 2 2 1 5
GL2 0 2 1 0 3 GL2 1 0 1 0 2
GL3 0 2 2 1 5 GL3 0 1 0 0 1
GL4 2 0 0 0 2 GL4 1 3 0 0 4而车的颜色是动态生成的,不一定是黑,白,红,绿...那么,我怎么去掉其他星期的车型列???
select a.车型,
a.黑,a.白,a.红,a.绿,a.合计,
b.黑,b.白,b.红,b.绿,b.合计,
c.黑,c.白,c.红,c.绿,c.合计,
d.黑,d.白,d.红,d.绿,d.合计
from ...
(select 车型,黑,白,红,绿,合计 from tb where date = '第一个星期') t1
left join
(select 车型,黑,白,红,绿,合计 from tb where date = '第二个星期') t2
on t1.车型 = t2.车型
left join
(select 车型,黑,白,红,绿,合计 from tb where date = '第三个星期') t3
on t1.车型 = t3.车型
left join
(select 车型,黑,白,红,绿,合计 from tb where date = '第四个星期') t4
on t1.车型 = t4.车型
------
left join是纵向联接的吧..?
能帮我认真看一下吗?是另外的问题 谢谢
其中某个星期的SQL如下:
select @s='select 车型=b.txt'
select @s=@s+','+quotename(ColorNam,'''')+'=(case when 颜色 like ''%'+ColorNam+'%'' then 1 else 0 end) '
from tb_stat_color
select @s=@s+',合计=count(颜色) into ##t0 from vw_car_sale_stat a right join (select txt from tb_car_type where depth=2) b on a.车型=b.txt
and a.销售时间 between '+quotename('2007-1-1','''')+' and '+quotename('2007-1-7','''')
+' group by all b.txt,a.颜色 '
exec(@s)
得到的结果类似:
车型 黑 白 红 绿 合计
GL1 1 1 2 0 4
GL2 0 2 1 0 3
GL3 0 2 2 1 5
GL4 2 0 0 0 2然后是4个结果的横向连接:
select * from ##t0 a,##t1 b,##t2 c,##t3 d where a.车型=b.车型 and a.车型=c.车型 and a.车型=d.车型
这样会有4个车型列,我只想要第一个星期的车型列...怎么办?
车型 黑 白 红 绿 合计车型 黑 白 红 绿 合计
GL1 1 1 2 0 4 GL1 0 2 2 1 5
GL2 0 2 1 0 3 GL2 1 0 1 0 2
GL3 0 2 2 1 5 GL3 0 1 0 0 1
GL4 2 0 0 0 2 GL4 1 3 0 0 4