2010-07-26 2 views
0

Привет У меня есть таблица заказов и таблица платежей, которые связаны order_num. Я хотел бы получить записи из таблицы заказов, у которых есть записи в таблице платежей PaymentType 'A', а также PaymentType 'B', и их суммы совпадают. Пример номер заказа 411 должен быть возвращен мне только в том случае, если он имеет как минимум два платежа, а один из них - тип платежа «А», а другой - номер платежа «b», а сумма для обоих составляет 45Как проверить, существует ли тип строки в таблице

Спасибо.

+0

Вы попробовали что-нибудь? – hgulyan

+0

Можете ли вы показать нам свой SQL до сих пор? – DOK

+0

Что делать, если есть несколько платежей типа A или B? Это возможно? Должна ли общая сумма всех платежей A и B равняться друг другу или только любой паре? Образцы данных и ожидаемый результат (охватывающие столько случаев, о которых вы можете думать) были бы очень полезными, позволяя нам помочь вам. –

ответ

1

Как и в случае с комментариями, есть очень мало информации для окончательного ответа. Здесь идет возможное решение, по крайней мере, в базовой форме.

SELECT * 
FROM Orders o 
LEFT JOIN Payment p1 ON o.order_num = p1.order_num 
LEFT JOIN Payment p2 ON o.order_num = p2.order_num 
WHERE p1.Type = "A" 
AND p2.Type = "B" 
AND p1.Amount = p2.Amount 
+0

безупречный. вот что я искал. – Riz

0

Пока вы можете гарантировать, что существует не более одного А и один В ряд:

SELECT 
    <columns here> 
FROM 
    Orders O 
INNER JOIN Payments PA ON 
    PA.order_number = O.order_number AND 
    PA.payment_type = 'A' 
INNER JOIN Payments PB ON 
    PB.order_number = O.order_number AND 
    PB.payment_type = 'B' 
WHERE 
    PA.amount = PB.amount 
0

Как об этом:

SELECT  o.OrderID, 
      o.Amount 
FROM  Order AS o 
INNER JOIN Payment AS pA ON pA.OrderID = o.OrderID AND pA.PaymentType = 'A' 
INNER JOIN Payment AS pB ON pB.OrderID = o.OrderID AND pB.PaymentType = 'B' 
WHERE  pA.Amount = pB.Amount 
GROUP BY o.OrderID, 
      o.Amount 
+0

Я считаю, что сумма указана в таблице Платежи и должна быть равна между двумя строками (A & B) –

0

Создание некоторых (надеюсь) разумные предположения о названиях таблиц, столбцов и т. д., как насчет ...

SELECT * 
    FROM ORDER_TABLE 
    WHERE EXISTS (SELECT * 
         FROM PAYMENT_TABLE 
         WHERE PAYMENT_TYPE   = 'A'    AND 
          PAYMENT_TABLE.ORDER = ORDER_TABLE.ORDER AND 
          PAYMENT_TABLE.AMOUNT = ORDER_TABLE.AMOUNT) AND 
      EXISTS (SELECT * 
         FROM PAYMENT_TABLE 
         WHERE PAYMENT_TYPE   = 'B'    AND 
          PAYMENT_TABLE.ORDER = ORDER_TABLE.ORDER AND 
          PAYMENT_TABLE.AMOUNT = ORDER_TABLE.AMOUNT); 
0

Предполагает, что суммы существуют только в таблице платежей и что таблица платежей может иметь несколько записей для типа платежа.

select [columns] 
    from ORDER O 
where exists (select null from PAYMENT PA, PAYMENT PB 
       where PA.PAYMENT_TYPE = 'A' 
        and PB.PAYMENT_TYPE = 'B' 
        and PA.ORDER_NUM = O.ORDER_NUM 
        and PB.ORDER_NUM = O.ORDER_NUM 
        and PA.AMOUNT  = PB.AMOUNT) 
Смежные вопросы