如何将SQL查询结果从行转换为分列视图

4

我有一个复杂的select查询,它返回一个结果:

  1_id   2_id   3_id    4_id   CultureId
value1  value2  value3    a       1
value1  value2  value3    b       2

我需要以以下格式获得结果:
  1_id   2_id   3_id    4_id_1   4_id_2  
value1  value2  value3    a        b       

我能想到这种方法,但也许有更好的方式实现?

SELECT 1_id, 2_id, 3_id, (SELECT 4_id from table where 1_id = value1 and CultureId = 1) as 4_id_1, 
                         (SELECT 4_id from table where 1_id = value1 and CultureId = 2) as 4_id_2 
from table where 1_id = value1  

问题在于我的实际内部SELECT查询(“SELECT 1_id,2_id,3_id,4_id CultureId from table where 1_id = value1”)被我在解决方案中使用了三次,它是一个复杂的查询,包含几个连接,使得这个解决方案变得非常庞大。

是否有简化它的方法?


嗨,Lia,请研究一下“pivot”函数。同样的效果也可以通过使用CTE实现。 - Doug Coats
1个回答

3
你可以使用聚合函数min()max()来实现:
select id_1, id_2, id_3,
       min(cultureId) as cultureid_1,
       nullif(max(cultureId), min(cultureId)) as cultureid_2
from t
group by id_1, id_2, id_3;

那对于 cultureId 是 int 类型的情况可以这样做,如果不是 int 呢?我已经编辑了我的问题示例,使其更接近真实情况。 - Lia
1
ID的类型并不重要。max()基本上适用于所有数据类型。 - Gordon Linoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接