1

ここで同様の問題が見つかりました: Move duplicate values to another column、しかし、それがうまくいくかどうかはわかりません。

データの設定方法は次のとおりです。

Account_ID  Phone Number  Phone Number ID
1           1             1
1           2             2
1           3             3
1           4             4
1           5             5
1           6             6
2           1             1
2           2             2
2           3             3
2           4             4
2           5             5
2           6             6

各アカウント ID には、6 つの電話番号ごとに 1 つのエントリがあります。私はそれを次のようにしたい:

Account_ID  Phone Number 1  Phone Number 2  Phone Number 3  etc.
1           1               2               3
2           2               2               2

CASE次のようなステートメントを使用してみました。

SELECT
Account_ID,
CASE Phone Number ID
WHEN 1 THEN Phone Number END AS "Phone Number 1"
CASE Phone Number ID
WHEN 2 THEN Phone Number END AS "Phone Number 1"
etc.…
GROUP BY 
Case CASE Phone Number ID
WHEN 1 THEN Phone Number END
etc.…

ただし、Account_ID ごとにデータを 1 つの行に適切に統合することはできません。電話番号 ID に対応する電話番号を正しい列に配置しますが、各 Account_ID は依然として独自の行です。

何かご意見は?上記のリンクは、ネストが多すぎて、遅くて、この多くのフィールドには扱いにくいです。とにかくテストするためにそのバージョンを書きましたが、15分間実行されています.

前もって感謝します!

4

3 に答える 3

2

PIVOTを使用して、必要な出力を取得できます。


select * from 
(table1 
   pivot (max("Phone Number") for "Phone Number ID"
  in ('1' as "Phone Number 1",
      '2' as "Phone Number 2",
      '3' as "Phone Number 3",
      '4' as "Phone Number 4",
      '5' as "Phone Number 5",
      '6' as "Phone Number 6"))
 )

SQL フィドルのデモ

于 2013-03-29T23:27:22.060 に答える
0

あなたは近くにいます。caseaと amaxと aが必要ですgroup by:

select Account_ID,
       max(CASE Phone Number ID = 1 then Phone Number end) as "Phone Number 1",
       max(CASE Phone Number ID = 2 then Phone Number end) as "Phone Number 2",
       max(CASE Phone Number ID = 3 then Phone Number end) as "Phone Number 3",
       . . .
from . . .
group by Account_Id
于 2013-03-29T23:18:31.357 に答える
0

あなたはたくさんの結合でそれを行うことができます

WITH accounts 
     AS (SELECT DISTINCT account_id 
         FROM   phones) 
SELECT a.account_id, 
       one.phone_number   phone_number_1, 
       two.phone_number   phone_number_2, 
       three.phone_number phone_number_3, 
       four.phone_number  phone_number_4, 
       five.phone_number  phone_number_5, 
       six.phone_number   phone_number_6 
FROM   accounts a 
       LEFT JOIN phones one 
              ON a.account_id = one.account_id 
                 AND one.phone_number_id = 1 
       LEFT JOIN phones two 
              ON two.account_id = two.account_id 
                 AND two.phone_number_id = 2 
       LEFT JOIN phones three 
              ON a.account_id = three.account_id 
                 AND three.phone_number_id = 3 
       LEFT JOIN phones four 
              ON a.account_id = four.account_id 
                 AND four.phone_number_id = 4 
       LEFT JOIN phones five 
              ON a.account_id = five.account_id 
                 AND five.phone_number_id = 5 
       LEFT JOIN phones six 
              ON a.account_id = six.account_id 
                 AND six.phone_number_id = 6 

デモ

于 2013-03-29T23:22:38.177 に答える