2

多対多のテーブルですべての 1 対 1 の関係を取得しようとしています。

以下の例では、私が返したい唯一のレコードは最後の (3,3) です。

PaymentID InvoiceID
1          1
1          2
2          2
3          3

私が得た最も近いものは

Select * from Table where PaymentID in (
select PaymentID from Table t
inner join (
    select InvoiceId from Table 
    group by InvoiceId
    having count(InvoiceId) = 1
) inv on t.InvoiceId = inv.InvoiceId
group by PaymentId
having count(PaymentId) = 1
)

これは1と3を返します

どんなアイデアでも大歓迎です

ありがとう。

4

1 に答える 1

4
SELECT  *
FROM    (
        SELECT  *,
                COUNT(*) OVER (PARTITION BY paymentId) AS pcnt,
                COUNT(*) OVER (PARTITION BY invoiceId) AS icnt
        FROM    mytable
        ) q
WHERE   pcnt = 1
        AND icnt = 1
于 2012-06-01T09:59:07.977 に答える