2016-09-01 40 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以匹配在內嵌視圖的查詢返回的列名。