Как я могу получить только одну строку на запись в основной таблице? - PullRequest
1 голос
/ 19 августа 2010

можно получить только одну строку на запись в многопользовательском запросе?

У меня есть три таблицы:

ЯБЛОКИ

ID | APPLE
----------
1  | RED
2  | YELLOW
3  | GREEN

ХОЗЯЙСТВА

ID  | FARM
--------------------
B1  | GEORGE'S FARM
B2  | JOHN'S FARM

FARM_APPLES

FARM  | APPLE
---------------
B1    | 1
B1    | 2
B1    | 3
B2    | 1
B3    | 3

С этими таблицами мне нужен такой результат:

FARM_NAME | APPLE_1 | APPLE_2 | APPLE_3
----------------------------------------
B1        | 1       | 2       | 3
B2        |1        |         | 3

Любая помощь очень ценится, заранее спасибо.

EDIT

Спасибо и OMG Ponies, и Биллу, я попробую оба ваших решения, только одна вещь, возможно получить такой результат:

FARM          | RED | YELLOW | GREEN
-------------------------------------
GEORGE'S FARM | YES |  YES   |  YES
JOHN's FARM   | YES |  NO    |  YES

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

Firebird 2.0 поддерживает выражение CASE , поэтому вы можете использовать:

  SELECT fa.farm AS farm_name,
         MAX(CASE WHEN fa.apple = 1 THEN fa.apple ELSE NULL END AS apple_1,
         MAX(CASE WHEN fa.apple = 2 THEN fa.apple ELSE NULL END AS apple_2,
         MAX(CASE WHEN fa.apple = 3 THEN fa.apple ELSE NULL END AS apple_3,
    FROM FARM_APPLES fa
GROUP BY fa.farm
0 голосов
/ 19 августа 2010
SELECT F.ID AS FARM_NAME,
  A1.APPLE AS APPLE_1,
  A2.APPLE AS APPLE_2,
  A3.APPLE AS APPLE_3
FROM FARMS AS F
LEFT OUTER JOIN FARM_APPLES AS A1 ON F.ID = A1.FARM AND A1.APPLE = 1
LEFT OUTER JOIN FARM_APPLES AS A2 ON F.ID = A2.FARM AND A2.APPLE = 2
LEFT OUTER JOIN FARM_APPLES AS A3 ON F.ID = A3.FARM AND A3.APPLE = 3;
...