2010-07-26 37 views
0

您好我有一個order_num鏈接的訂單表和付款表。我希望從訂單表中獲得支付類型'A'的支付表中的條目以及支付類型'B'和它們的金額匹配的條目。示例訂單號碼411只能返回給我,如果它至少有兩個付款,其中一個是付款類型「A」,另一個是付款類型「b」,且金額均爲45如何檢查表中是否存在行的類型

謝謝。

+0

你有什麼嘗試嗎? – hgulyan 2010-07-26 16:34:37

+0

到目前爲止,你能向我們展示你的SQL嗎? – DOK 2010-07-26 16:34:54

+0

如果有多種A或B類型的付款,該怎麼辦?那可能嗎?所有A和B付款的總額是否應該相等,或者只有一對?樣本數據和預期結果(涵蓋儘可能多的情況下,你可以想到)將是非常有用的是讓我們來幫助你。 – 2010-07-26 16:35:37

回答

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 2010-07-26 16:42:30

0

只要你能保證最多有一個A和一架B行:

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)之間相等。 – 2010-07-26 16:44:09

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)