2016-09-01 138 views
0

我有以下情况。一个返回查询结果的格式如下:在SQL查询结果中合并行

N1 || 10 || 5  
N2 || 20 || 9  
N3 || 5 || 4 

通过一些错误无法修复,N3比N1不同的名字,而他们应该是相同的。我想在这样一种方式,他们一起成为行1和3相结合:

N1 || 15 || 9 

所以我要合并行1和行3使用正则矩阵符号所需要的输出等于:

M(1,1) || M(1,2)+M(3,2) || M(1,3)+M(3,3). 

难以解决的是我无法定义临时表来存储结果,因为数据库不允许这样做。有没有办法达到预期的输出?

+0

将标记从mysql更改为tsql。猜猜这会改变答案,因为语法看起来差异很大。 – Christov

+0

您使用的是什么RDBMS? SQL Server?请添加相关标签,指定版本。那么第2排呢,还是应该有一些规则呢,或者这只是N1和N3? – gofr1

回答

1

您可以使用现有的查询作为内联视图,并使用GROUP BY折叠行。只需使用一个用'N1'代替'N3'的表达式。

SELECT IF(q.name1='N3','N1',q.name1) AS name1 
     , SUM(q.val2)     AS val2 
     , SUM(q.val3)     AS val3 
    FROM (
      -- put here the query query that returns resultset 
      -- 
      -- name1 val2 val3 
      -- ----- ---- ---- 
      -- N1  10  5 
      -- N2  20  9 
      -- N3  5  4 
      -- 
      SELECT ... AS name1 
       , ... AS val2 
       , ... AS val3 
      FROM ... 
     ) q 
    GROUP BY IF(q.name1='N3','N1',q.name1) 
    ORDER BY 1 

注意:更换name1val2val3以匹配在内嵌视图的查询返回的列名。