0

こんにちは、現在エラーなしで実行されているが、必要なデータが表示されないクエリについて支援を求めています。私のテーブルには電話番号が格納されており、関連するフィールドは id、phonetype、および phonenumber です。

実行すると、最後の番号のみが表示されますが、期待どおりに列、、、が返さidれます。特定の行に自宅の電話番号と勤務先の電話番号があるとします...そのIDの勤務先電話番号列にのみデータを取得します。自宅の電話、勤務先の電話、携帯電話が連続している場合は、CELL PHONE 列のデータのみを取得します。HOME PHONEWORK PHONECELL PHONE

電話の種類ごとに一意の列にある特定の id のすべての電話番号の 1 つの行が必要です。それが理にかなっているといいのですが、そうでない場合は、クエリで何を探しているかがわかると思います...ありがとう

SELECT id,
(IF(phonetype = 'HOME PHONE', phonenumbers.phonenumber, '')) AS 'HOME PHONE',
(IF(phonetype = 'WORK PHONE', phonenumbers.phonenumber, '')) AS 'WORK PHONE',
(IF(phonetype = 'CELL PHONE', phonenumbers.phonenumber, '')) AS 'CELL PHONE'
FROM phonenumbers
GROUP BY id;

クエリしているテーブルは次のようになります

id | name | phonetype | phonenumber

1  |  Jim  |  HOME PHONE | 0000000001        
1  |  Jim  |  WORK PHONE | 0000000002
2  |  Kim  |  HOME PHONE | 0000000003
2  |  Kim  |  WORK PHONE | 0000000004
2  |  Kim  |  CELL PHONE | 0000000005

私が探している結果は次のようになります...

id | name | home phone | work phone | cell phone

 1 | Jim | 0000000001 | 0000000002 | 
 2 | Kim | 0000000003 | 0000000004 | 0000000005
4

1 に答える 1

1

各 ID に対して、各タイプの電話番号が 1 つだけあると仮定します。

SELECT a.id,
(SELECT phonenumbers.phonenumber FROM phonenumbers WHERE phonetype = 'HOME PHONE' AND id = a.id) AS 'HOME PHONE',
(SELECT phonenumbers.phonenumber FROM phonenumbers WHERE phonetype = 'WORK PHONE' AND id = a.id)  AS 'WORK PHONE',
(SELECT phonenumbers.phonenumber FROM phonenumbers WHERE phonetype = 'CELL PHONE' AND id = a.id)  AS 'CELL PHONE'
FROM phonenumbers a
GROUP BY a.id;

役立つかもしれません。乾杯。

于 2013-04-03T22:42:42.797 に答える