SQL Server中,不用游标行变列的另一种高效方法

这个解决方案大概是10年前想到的,以前做数据分析的时候,常常用到这个办法。当时在60W数据的时候,速度比用游标快10多倍,当时是个年轻菜鸟(现在是年老的),也可能是游标使用不当。

但是这个需要程序配合

 

假设有如下几个表

Location 地区表

Id Name
1 中国                 
2 美国                 
3 英国                 
4 法国                 

 

Productor表

Id Name
1 产品1
2 产品2
3 产品3
4 产品4

 

他们之间的关系表 Productor_LocationRelation

ProductorId LocationId
1 1
1 4
2 2
4 4

 

输出的目标如下:

  中国 美国 英国 法国
产品1 Yes No No Yes
产品2 No Yes No No
产品3 NO No NO No
产品4 No No No Yes

 

用Sql的办法是 生成 Location和Productor的 笛卡尔表,然后和Relation表格 left Join。Sql如下。

Code

 

数据如下:

image

 

怎样输出表格就不写了,反正每4行数据就代表输出的一行,4这个数字由Location的数据决定的。

posted @ 2010-11-15 15:55  沉默的糕点  阅读(...)  评论(...编辑  收藏