sql-server - 获取多对多关系中两个字段上唯一的记录

标签 sql-server sql-server-2008

我正在尝试在多对多表中获取所有一对一关系。

在下面的示例中,我想要返回的唯一记录是最后一个 (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

非常感谢任何想法

谢谢。

最佳答案

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

关于sql-server - 获取多对多关系中两个字段上唯一的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10848065/

相关文章:

sql-server - 在 Powershell 中使用 Invoke-SqlCmd 使用 $( 插入字符串时出错

c# - 为什么 Dapper QueryAsync<T> 的行为与具有存储过程返回值的 Query<T> 不同?

sql - 转换为 mm/dd/yyyy 格式

sql-server-2008 - Visual Studio 2010 数据库项目!

SQL - 如何计算一列中多次出现的值

sql 使用 split 函数选择字符串?

php mysql 在2个表内动态选择

sql-server - 发布项目的asp.net MVC问题-创建数据库权限被拒绝

sql-server - SQL Server 2008 R2 - 网络版 VS。标准

sql-server-2008 - 在哪里可以找到 SQL Server 2008 中脚本任务的 SSIS 预编译属性?