1

現在、次の形式のテーブルと次のサンプルデータを使用しています。

transaction  name  receipt
     1       jim   aisjdy
     2       john  uuyjskl
     2       john  ioxiqo
     3       will  eurique
     1       jim   xoqiel
     3       will  sijcjg

各トランザクションは顧客の名前に関連付けられており、2 つの別々の領収書を受け取ります。

「トランザクション」、「名前」、および 2 つの異なる領収書を 1 行に表示するクエリを作成するにはどうすればよいでしょうか。

例:

transaction  name  receipt  receipt
     1       jim    aisjdy   xoqiel

私はこれが悪い習慣であることを知っており、アイデアの世界では、2 つの異なる領収書を含む 2 つの列を作成するか、トランザクションと名前を含む 2 つのテーブルにテーブルを正規化し、別のものに領収書 1 と 2 を含むテーブルを正規化します。残念ながら、私はこの表を作成しておらず、すべてを再構築する時間がありません。

よろしくお願いします。よろしくお願いします。

4

2 に答える 2

4

値は 2 つしかないため、group by を使用できます。

select transaction, name, min(receipt), max(receipt)
from t
group by transaction, name
于 2012-07-25T21:11:36.477 に答える
0

きれいではありませんが、次のように機能します。

SELECT
    tr1.transaction,
    tr1.name,
    tr1.receipt AS receipt1,
    tr2.receipt AS receipt2
FROM transaction tr1
    JOIN transaction tr2 ON tr1.transaction = tr2.transaction
        AND tr1.receipt < tr2.receipt

これは、トランザクションごとに正確に2つのレコードがある場合にのみ機能しますが、常に特定の番号があることがわかっている場合にも機能します(参加して、tr2.receipt <tr3.receiptなどを確認します)。ただし、2つしかない限り、ゴードンの答えは理解しやすく、ほぼ確実に高速です。

于 2012-07-25T21:19:00.247 に答える