2017-07-31 4 views
2

私は既存のデータベーステーブルのSQL文について質問があり兼ね備えています。SQLは、行の値が

ID | LEAD_ID | FIELD_NUMBER | VALUE 
1 | 1  | 1    | yes 
2 | 1  | 2    | [email protected] 
3 | 2  | 1    | yes 
4 | 2  | 2    | [email protected] 
5 | 3  | 1    | no 
6 | 3  | 2    | [email protected] 

valueの列を2つの異なる列に分割することはできますか?

期待される結果:

LEAD_ID | YES_OR_NO | EMAIL 
     1 | yes  | [email protected] 
     2 | yes  | [email protected] 
     3 | no  | [email protected] 

私はMAX()引数の権利を使用することはできませんか?

答えて

1

に参加しますこの例の2つ以上のもの)。

SELECT t.LEAD_ID, t.value AS YES_OR_NO, sub.VALUE AS EMAIL 
FROM TABLENAME t 
INNER JOIN TABLENAME sub ON t.LEAD_ID = sub.LEAD_ID AND sub.FIELD_NUMBER !=1 
WHERE t.FIELD_NUMBER = 1 

出力

LEAD_ID YES_OR_NO EMAIL 
1  yes  [email protected] 
2  yes  [email protected] 
3  no  [email protected] 

SQLフィドル:しかしhttp://sqlfiddle.com/#!9/1587e3/3/0

+0

ありがとう、@マット私のためにそれをやった! – Ritchie

-1

同様:

SELECT DISTINCT LEAD_ID 
       , CASE WHEN FIELD_NUMBER = 1 THEN VALUE END AS 'YES_OR_NO' 
       , CASE WHEN FIELD_NUMBER = 2 THEN VALUE END AS 'EMAIL' 
    FROM TABLENAME 

自己の必要はありませんが、あなたは自己を使用することができ

+0

なぜdownvotes? – RealCheeseLord

0

に参加するには、使用している場合(参加SELF JOINを使用し、各自己のためFIELD_NUMBERを定義

select a.LEAD_ID, a.VALUE as YES_OR_NOT, b.VALUE as EMAIL 
    from TABLENAME a 
    inner join TABLENAME b on a.LEAD_ID = b.LEAD_ID and b.field_number = 2 
    where a.field_number = 1 
+0

なぜON句に 'b.field_number'を、WHERE句に' a.field_number'を入れましたか? – yanman1234

+0

フィルタのあるテーブルを強制的にyesまたはnoの行に、bテーブルのものを電子メール行をフィルタリングするには – scaisEdge

+0

WHERE句に両方の条件を入れるのはなぜですか? – yanman1234

関連する問題