1

私は3つのテーブルを持っています。最初は account テーブル、次に contact テーブル、phone テーブルです。

ここに書き込もうとしているクエリの要件は、特定のアカウントについて、主要な連絡先とそのすべての電話番号を一番上に表示し、残りの連絡先を名前順に表示することです。また、電話機は事前定義された順序で表示される必要があります。最初に自宅の電話番号、次に勤務先の電話番号など。

これは私がこれまでに持っているものです

SELECT c.ContactID, c.FullName, p.PhoneCategory, p.Phone, a1.MainContactID 
FROM Contact c
JOIN Phone p ON p.ContactID = c.ContactID
JOIN Account a1 ON a1.AccountID= c.AccountID
WHERE a1.AccountID= 1000
ORDER BY 
c.FullName, 
CASE PhoneCategory
    WHEN 'Home Phone' THEN 1
    WHEN 'Business Phone' THEN 2
    WHEN 'Cell Phone' THEN 3
    WHEN 'Fax' THEN 4
    WHEN 'Other Phone' THEN 5
    WHEN 'Email Address' THEN 6
    WHEN 'E-Mail' THEN 6
END 

これを実行すると、リストが名前でソートされ、番号も正しい順序で表示されます。唯一の問題は、メインコンタクトを一番上に表示する方法を判断できないことです

編集: a1 の代わりに c1.MainContactID を入力しました

4

2 に答える 2

1

何が何であるかは明確ではありませんがc1、主要な連絡先の id と非主要な連絡先の null を提供する結合が表示されていない場合、クエリは次のようになります。

SELECT c.ContactID, c.FullName, p.PhoneCategory, p.Phone, c1.MainContactID 
FROM Contact c
JOIN Phone p ON p.ContactID = c.ContactID
JOIN Account a1 ON a1.AccountID= c.AccountID
WHERE a1.AccountID= 1000
ORDER BY 
CASE
  WHEN a1.MainContactID = c.ContactID THEN 1
  ELSE 0
END,
c.FullName, 
CASE PhoneCategory
    WHEN 'Home Phone' THEN 1
    WHEN 'Business Phone' THEN 2
    WHEN 'Cell Phone' THEN 3
    WHEN 'Fax' THEN 4
    WHEN 'Other Phone' THEN 5
    WHEN 'Email Address' THEN 6
    WHEN 'E-Mail' THEN 6
END 
于 2013-10-19T19:05:07.287 に答える