2014-03-25 44 views
-1

我有一個表中的SQL Server 2008 R2這樣的SQL列組合:如何根據另一場

Acc_id Bench-1  Bench-2 
------------------------------- 
    1  xx 
    1     vv 
    2  pp 
    2     ii 
    3  kk 
    4     ll 

現在,我想這個表Acc_id列的基礎上結合起來,得到如下:

Acc_id Bench-1  Bench-2 
--------------------------------- 
    1  xx   vv 
    2  pp   ii 
    3  kk  
    4      ll 

那麼,有人可以幫助我。

+2

你要找的這句話是'JOIN'。 – Zane

+0

可以請你解釋一下如何在我的情況下使用它 –

+0

你將需要一個完整的外連接,因爲你想從這兩個表中顯示出nulllls – Bobby

回答

0

我會做到這一點,如:

select 
    Acc_id, 
    max([Bench-1)] as [Bench-1], 
    max(([Bench-2]) as [Bench-2] 
from 
    myTable 
group by 
    Acc_id 

這是假設ACC_ID不會有數據的多個行中同列

如果是這樣的話,那麼你的使用效果的知識將發揮作用。我經常將執行這更完全像個

select 
    Acc_id, 
    min([Bench-1)] as [Bench-1Min], 
    max([Bench-1)] as [Bench-1Max], 
    Count([Bench-1)] as [Bench-1Count], 
    min([Bench-2)] as [Bench-2Min], 
    max([Bench-2)] as [Bench-2Max], 
    Count([Bench-2)] as [Bench-2Count], 
from 
    myTable 
group by 
    Acc_id 

這一切都依賴於實際數據的實際複雜性和您想要的結果做什麼。如果它真的很簡單,例如多連接解決方​​案可能適用於您,但我經常發現,在更復雜的總結中,解決方案組爲我提供了所需的結果和性能。

+0

感謝您的回覆,但是您能否告訴我們使用max()功能在這裏。 –

0
SELECT ISNULL(b1.Acc_id,b2.Acc_id) as Acc_id, 
     b1.data, 
     b2.data 

FROM Bench-1 AS b1 FULL OUTER JOIN 
     Bench-2 AS b2 ON b2.Acc_id = b1.Acc_id 
0

檢查下面的查詢

SELECT DISTINCT a.acc_id, 
      b.bench_1, 
      c.bench_2 
FROM table1 a 
    LEFT OUTER JOIN (SELECT acc_id, 
          bench_1 
        FROM table1 
        WHERE Isnull(bench_1, '') <> '') b 
       ON a.acc_id = b.acc_id 
    LEFT OUTER JOIN (SELECT acc_id, 
          bench_2 
        FROM table1 
        WHERE Isnull(bench_2, '') <> '') c 
       ON a.acc_id = c.acc_id 
+0

這就像一個魅力!非常感謝 :) –