2016-01-22 31 views
-1

我有一個問題,沒有人知道我怎麼能得到這個從SQL表選擇一個行而不是多個具有相同ID和不同的價值

id | value1 | value2 | value3 
1  1  null  null 
1  1  2  null 
1  1  5  6 
2  2  null  null 
2  3  5  null 
3  7  null  null 
3  6  0  8 

結果應該是

id | value1 | value2 | value3 
1  1  5  6 
2  3  5  null 
3  6  0  8 

編輯:結果應該是行,其中i有更多的項目(值1,值2,值3)填充

EDIT2:上文表是一些先前的查詢的結果。我有兩個或更多行填充相同的值字段,那麼我應該得到所有這些行,但如果不是,那麼我應該只獲得更多數據字段的行。價值觀的重要性從右到左

音符。我用MSSQL

+2

你可以告訴我們當一個id有幾個不同的值時,如何選擇value1/value2/value3嗎? – jarlh

+0

我*認爲*您的問題由於兩個原因而被低估。首先它不包括你寫這個查詢的嘗試。其次,從@ jarlh的回答中可以清楚地看出,這個問題並沒有完全解釋你在做什麼。如果你編輯這個問題,它會幫助那些在未來發現自己有類似問題的人。 –

+0

@ destination-data你是對的。當我發佈這個問題時我犯了錯誤,因爲我沒有解釋所有的用例。我已更新帖子 –

回答

1

做一個GROUP BY id讓每個ID只有一次。使用MIN(或者MAX)爲id選擇一個值1等。

select id, 
     min(value1) as value1, 
     max(value2) as value2, 
     min(value3) as value3 
from tablename 
group by id 

編輯:

使用公用表表達式(CTE),在那裏你也算非空 值的數量爲每行。返回具有該ID最大計數的所有cte行。

with cte as 
(
select t.*, case when value1 is null then 0 else 1 end + 
      case when value2 is null then 0 else 1 end + 
      case when value3 is null then 0 else 1 end as valcount 
from tablename 
) 
select t1.id, t1.value1, t1.value2, t1.value3 
from cte t1 
where t1.valcount = (select max(valcount) from cte t2 where t1.id = t2.id) 
+0

也許需要使用'MAX'? – Devart

+0

@Devart,有時看起來像MIN,有時看起來像MAX。 (例如ID 3有值1 7,但OP希望6.即最大不習慣那裏。) – jarlh

+0

我並不需要用相同的ID行合併。我只需要誰擁有更多的項目(VAL1,VAL2,VAL3)行充滿 –

相關問題