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
数据如下:
怎样输出表格就不写了,反正每4行数据就代表输出的一行,4这个数字由Location的数据决定的。