2015-10-23 22 views
1

對於此簡化的表結構(請參閱fiddle),我需要刪除爲相同ID輸出的第二行。單個ID的行值可能僅爲「1」。TSQL - CASE創建兩個列中的一個

CREATE TABLE lookup 
    (
    id int, 
    field varchar(20), 
    row varchar(20), 
    value varchar(50) 
    ); 

INSERT INTO lookup 
(id,field, row, value) 
VALUES 
(1,'55', '1', '1XYZ'), 
(1,'55', '2', '2XYZ'), 
(2,'55', '1', '3XYZ'); 


CREATE TABLE output 
    (
    id int, 
    value_1 varchar(50), 
    value_2 varchar(50) 
    ); 

INSERT INTO output 
(id, value_1, value_2) 
VALUES 
(1, '1XYZ', '2XYZ'), 
(2, '3XYZ', null); 


-- wrong 
select id 
,case when (field = 55 and row = 1) then value END AS value_1 
,case when (field = 55 and row = 2) then value END AS value_2 
from lookup; 

希望你能告訴我如何。

謝謝。

+0

是行數總是要1或2相同的id和領域? 對於id = 1和field = 55,可能row = 3,value = 4XYZ? –

回答

4

只需添加聚集到查詢:

select id 
,max(case when (field = 55 and row = 1) then value END) AS value_1 
,max(case when (field = 55 and row = 2) then value END) AS value_2 
from lookup 
group by id; 

Demo here

+3

我會添加這樣的評論,因爲'MAX'函數忽略NULL值,所以可以有效地將它們過濾出每列,這是OP想要實現的。 –

+0

這看起來不錯,但我的問題是如何在選擇stmt更多的列工作?我是否需要通過stmt將所有列放入組中? –

+0

@TonyClifton這些額外列的值是否與每個組相同,即每個「id」都相同? –

相關問題