1、请将竖表AA转为横表BB,字段及数据如下所示:
转换前的竖表AA:
ITEM_ID | CONTENT | CONTENT_CONFIG |
2040104 | 5 | acct_item |
2040104 | 6 | serv_type |
2040104 | 2 | user_type |
2040105 | 1 | acct_item |
2040105 | 2 | serv_type |
2040105 | 3 | user_type |
转换后的横表BB:
ITEM_ID | CONTENT | SERV_TYPE | USER_TYPE |
2040104 | 5 | 6 | 2 |
2040105 | 1 | 2 | 3 |
后面再思考了很久,baidu了几下,发现了二个页面介绍的:sql竖表变横表及NULL值聚合和SQL With cube。。模仿着后面那片文章的内容,慢慢的编写了一遍,最后也被我编写出来了,O(∩_∩)O哈哈~
- SELECT * FROM
- (
- SELECT ITEM_ID,
- SUM(CASE WHEN [CONTENT_CONFIG] = 'acct_item' THEN [CONTENT] END) AS [CONTENT],
- SUM(CASE WHEN [CONTENT_CONFIG] = 'serv_type' THEN [CONTENT] END) AS [SERV_TYPE],
- SUM(CASE WHEN [CONTENT_CONFIG] = 'user_type' THEN [CONTENT] END) AS [USER_TYPE]
- FROM dbo.AA GROUP BY ITEM_ID
- ) BB
发现其也不太长的代码,关键是SUM聚合函数和CASE WHEN的联合妙用,真是太强悍了。
那个cnblog的代码更强悍了,支持不定列的。天外有天,学者无境 WHEN的联合妙用,真是太强悍了。