将交错记录折叠到一行以重复键

时间:2017-06-02 22:10:18

标签: sql

我想折叠表以消除sql中的值,但表中有重复的键。例如,我想折叠它:

  key1   key2   v1     v2     v3    
  1      A      a      NULL   NULL  
  1      A      NULL   NULL   9     
  1      A      NULL   x      NULL  
  1      A      b      NULL   NULL  
  1      A      NULL   NULL   8     
  1      A      NULL   x      NULL  
  1      A      a      NULL   NULL  
  1      A      NULL   NULL   7     
  1      A      NULL   y      NULL  
  1      A      b      NULL   NULL  
  1      A      NULL   NULL   6     
  1      A      NULL   y      NULL  
  1      B      a      NULL   NULL  
  1      B      NULL   NULL   5     
  1      B      NULL   z      NULL  
  1      B      b      NULL   NULL  
  1      B      NULL   NULL   4     
  1      B      NULL   z      NULL  
  1      C      a      NULL   NULL  
  1      C      NULL   NULL   10    
  1      C             z      NULL  
  1      C      b      NULL   NULL  
  1      C      NULL   NULL   11    
  1      C      NULL   z      NULL  

进入这个:

  key1   key2   v1   v2   v3  
  1      A      a    x    9   
  1      A      b    x    8   
  1      A      a    y    7   
  1      A      b    y    6   
  1      B      a    z    5   
  1      B      b    z    4   
  1      C      a    z    10  
  1      C      b    z    11  

聚合函数不起作用,我没有成功使用自联接。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你试过"选择不同的"

 Select distinct key1, key2, v1, v2, v3
 From SomeTable

答案 1 :(得分:0)

您有一个键/值表。这是我们通常避免的事情,但有时无法避免。您的原始表格如下所示:

key1   key2  col   value
1      A     v1    a
1      A     v1    a
1      A     v1    a
1      A     v1    a
1      A     v1    b
1      A     v1    b
1      A     v1    b
1      A     v1    b
1      A     v2    x
1      A     v2    x
1      A     v2    y
1      A     v2    y
...

我按照另一个顺序显示行,然后显示查询结果,但这没关系,因为表没有固有的顺序;它包含数据作为无序集。我们可以看到,对于相同的键1 | A | v1,该表包含不同的值(四次'a',四次'b')。这是出乎意料的。通常,键值表会为每个键显示一个值。

因此,您的数据模型可能存在问题。或者表格中有更多列,例如显示历史数据的日期,也使我们能够选择1 | A | v1的当前值。然后,您必须更改原始查询才能将其考虑在内。或者数据模型 是正确的,1 | A | v1确实有四个'a'和四个'b',但是你的预期查询结果没有意义,因为没有什么可以关联v1 ='例如a'到v2 ='x'。

所以 错误:datamodel,现有查询,所需结果。找出哪个。