1

表 1 :
QUERY: クライアント テーブルの作成 ( applicationNo int 主キー、name varchar(20) );

Insert ステートメント: Insert into client values (1,'XYZ'),(1,'ABC'),(1,'DEF');

アプリケーション番号 | 名前  
    1 | XYZ  
    2 | ABC  
    3 | 防御力  

表 2:
クエリ : テーブル client ( applicationNo int、phoneNo Bigint、外部キー (applicationNo) は client (applicationNo)、主キー (applicationNO,phoneNo) を参照) を作成します。

phoneNO 値 (1,999999)、(1,888888)、(2,777777)、(3,666666)、(3,555555) に挿入します。

アプリケーション番号 | 電話番号
1 | 999999
1 | 888888
2 | 777777
3 | 666666
3 | 555555

次の出力が得られるように両方のテーブルを結合してタプルを取得できますか?ただし、単一のクエリを使用して、mysql 5.1 を使用しています

アプリケーション番号 | 名前 | 電話番号 1 | 電話番号2
1 | XYZ | 999999 | 88888
2 | ABC | 77777 | ヌル
3 | 防御 | 66666 | 555555

編集済み:追加情報
クロスタブと呼ばれるものを使用してみましたが、caseステートメント内でtotalPhoneNoを使用できません

SELECT applicationNo,count(phoneNo) as totalPhoneNo,  
SUM(CASE WHEN totalPhoneNo= 1 THEN phoneNO ELSE Null END) AS phoneNo1,  
SUM(CASE WHEN totalPhoneNO = 2 THEN phoneNo ELSE Null END) AS phoneNo2  
FROM phoneNO GROUP BY applicationNo;
4

3 に答える 3

1

試す:

select c.applicationNo, 
       max(c.name) name,
       max(p.phoneNo) phoneNo1,
       case 
           when max(p.phoneNo) = min(p.phoneNo) then NULL 
           else min(p.phoneNo) 
       end phoneNo2
from client c
left join phoneNo p on c.applicationNo = p.applicationNo
group by c.applicationNo
于 2010-09-15T16:36:56.120 に答える
1

これはMSSQL用です。これはうまく変換されますか?

With phones (ApplicationNo, PhoneNo, Instance) as
(Select ApplicationNo, PhoneNo,
  Row_Number OVER (Partition By ApplicationNo) as RowNum)
Select client.ApplicationNo, client.Name, 
  p1.PhoneNo as phoneNo1, p2.PhoneNo as phoneNo2
From client
  Left Join phones p1 on client.ApplicationNo=p1.ApplicationNo as p1.RowNum=1
  Left Join phones p2 on client.ApplicationNo=p2.ApplicationNo as p2.RowNum=2
于 2010-09-15T14:20:28.953 に答える
0

制限句付きの副選択を使用します。最初の副選択は最初の電話を選択し、もう一方は2番目の電話を選択します。

select ApplicationNo,
(SELECT phoneno FROM phones where phones.applicationno=app.ApplicationNo order by phoneno LIMIT 0, 1)as phone1,
(SELECT phoneno  FROM phones where phones.applicationno=app.ApplicationNo order by phoneno LIMIT 1, 1)as phone2
from application app
于 2010-09-15T16:15:51.393 に答える