1

私はテーブルを持っています: BID

Id_auction        bidder_1      winner_1    bidder_2    winner_2    item
  1                Alice           1          Ben         1          cup
  2               Charles          0          Alice       1          mug
  3                 Ben            1          Charles     1          pen

入札者が勝者である場合、値は 1 であり、勝者ではない場合、値は 0 です。したがって、最初のオークションでは Alice と Ben が勝者となり、2 番目のオークションでは Alice だけが勝ちます。MySQL クエリが必要になるため、結果は次のようになります。

Id_auction       bidder        item      bidder_number
1                Alice         cup            1
1                Ben           cup            2
2                Alice         mug            2
3                Ben           pen            1
3                Charles       pen            2

ありがとうございました!

4

1 に答える 1

2

これを試して:

SELECT *
FROM
(
  SELECT 
    t1.id_auction,
    t2.bidder_1 AS bidder,
    t2.item
  FROM table1 t1
  INNER JOIN table1 t2  ON t1.id_auction = t2.id_auction
                       AND t2.winner_1 = 1
  UNION ALL
  SELECT 
    t1.id_auction,
    t2.bidder_2 AS bidder,
    t2.item
  FROM table1 t1
  INNER JOIN table1 t2  ON t1.id_auction = t2.id_auction
                       AND t2.winner_2 = 1
) AS sub
ORDER BY id_auction;

SQL フィドルのデモ

これにより、次のことが得られます。

| ID_AUCTION |  BIDDER | ITEM |
-------------------------------
|          1 |   Alice |  cup |
|          1 |     Ben |  cup |
|          2 |   Alice |  mug |
|          3 | Charles |  pen |
|          3 |     Ben |  pen |

更新 1

bidder_number次のように、最初のクエリで値が 1 で、2 番目のクエリで値が 2の新しい列を選択するだけです。

SELECT *
FROM
(
  SELECT 
    t1.id_auction,
    t2.bidder_1 AS bidder,
    t2.item,
    1 AS bidder_number        -- <---------- This is the new column
  FROM table1 t1
  INNER JOIN table1 t2  ON t1.id_auction = t2.id_auction
                       AND t2.winner_1 = 1
  UNION ALL
  SELECT 
    t1.id_auction,
    t2.bidder_2 AS bidder,
    t2.item,
    2                         -- < --------- with value 2 for bidders 2
  FROM table1 t1
  INNER JOIN table1 t2  ON t1.id_auction = t2.id_auction
                       AND t2.winner_2 = 1
) AS sub
ORDER BY id_auction, bidder;

これにより、次のことが得られます。

| ID_AUCTION |  BIDDER | ITEM | BIDDER_NUMBER |
-----------------------------------------------
|          1 |   Alice |  cup |             1 |
|          1 |     Ben |  cup |             2 |
|          2 |   Alice |  mug |             2 |
|          3 |     Ben |  pen |             1 |
|          3 | Charles |  pen |             2 |

SQL フィドルのデモ

于 2013-02-14T13:01:19.133 に答える