2013-06-19 116 views
0

對不起,令人困惑的標題。我在尋找我正在尋找的解決方案時遇到了困難,因爲我不知道如何用幾句話來總結它。從另一行中選擇一個字段作爲另一個字段的字段

我有一個表table_name,其中有列指示符,ID和數字。指標可以是0或1,ID最多可以存在2次。如果ID號存在兩次,則其中一個指示符爲0,另一個爲1,如果該ID存在一次,則其指示符爲0.如果某行的指示符爲0,則該查詢需要能夠返回0,與指示器0匹配的ID,如果指示器是1

Indicator----ID-----Num 

1-------------01----3000 

0-------------01----4000 

0-------------02----5000 

0-------------03----100 

1-------------04----400 

0-------------04----200 

查詢的結果

4000 

0 

0 

0 

200 

0 

回答

0

這很棘手,因爲您要確保不會丟失任何行。出於這個原因,我有一個嵌套select聲明這樣做:

select (case when indicator = 0 then 0 
      else (select t2.num from table_name t2 where t2.id = t.id and t2.indicator = 0) 
     end) as Val 
from table_name t 

這裏是它的工作爲例(假設你的數據庫支持with):

with table_name as (
     select 1 as indicator, 1 as id, 3000 as num union all 
     select 0, 1, 4000 union all 
     select 0, 2, 5000 union all 
     select 0, 3, 100 union all 
     select 1, 4, 400 union all 
     select 0, 4, 200 
    ) 
select (case when indicator = 0 then 0 
      else (select t2.num from table_name t2 where t2.id = t.id and t2.indicator = 0) 
     end) as Val 
from table_name t 
+0

不是外部爲什麼可以加入確保你不會丟失行而沒有嵌套select的討厭問題? –

+0

@BillGregg。 。 。當然你可以使用外連接。作爲這個問題的局外人,如果事情不正確,那麼這個問題的約束使'join'容易增加或移除行。這是一個嵌套的'select'消除某些顧慮的情況。 –

+0

哎呀。感謝您的反饋。 –

0
select case when oneId.id is null the 0 else zero.num end case 
from table1 zero 
left join table1 oneId 
on zero.id = oneId.id 
and 1 = oneId.indicator 
where zero.indicator = 0 
0

嘗試這種情況:

SELECT IF(t1.indicator = 0 OR t2.Num IS NULL, 0, t2.Num) 
FROM table_name as t1 
LEFT JOIN table_name as t2 ON(
    t1.ID = t2.ID 
    AND t1.indicator != t2.indicator 
) 

http://sqlfiddle.com/#!2/61623a/3

相關問題