sql-如何计算两行的差异?

sql-如何计算两行的差异?,sql,sql-server,Sql,Sql Server,我有一张这样的桌子: Item ProviderId Item1 1 Item1 2 Item2 1 Item3 1 Item Item1 我想要一张新桌子。在新表中,它只列出至少有两个不同ProviderID的项目 所以在上面的示例中,由于只有item1有两个不同的ProviderId,我希望得到如下表: Item ProviderId Item1 1 Item1 2 Item2 1 Item3 1 Item Item1

我有一张这样的桌子:

Item    ProviderId

Item1   1

Item1   2

Item2   1

Item3   1
Item

Item1
我想要一张新桌子。在新表中,它只列出至少有两个不同ProviderID的项目

所以在上面的示例中,由于只有item1有两个不同的ProviderId,我希望得到如下表:

Item    ProviderId

Item1   1

Item1   2

Item2   1

Item3   1
Item

Item1
我如何编写语句才能做到这一点?

您必须使用group by并拥有:

或者没有明显的区别

演示 使用查询作为表:

select item
from (select item, ptoviderId from tabA) as tab
group by item, ProviderId
having count(1)>=2;
如果要创建新表,可以使用到:

试试这个:

 SELECT [Item]      
      FROM [TABLE_NAME]
      GROUP BY [Item]
      HAVING COUNT(DISTINCT ProviderId) >1
    GO

sql的什么味道?或者这是一个一般性问题?条件应该是>1,他想要2个或更多具有count distinct ProviderId>=2如果表项ProviderId也来自一个select join呢?@JacksonTale我又添加了一个解决方案。感谢您提供的更多解决方案solution@danihp哦,你说得对,如果一件物品的providerId是同一件物品的两倍,这没有道理,我想我可能错了你是对的。只有当N:M关系具有更多的属性,如“price”和“date”时才有意义……如果表项providerid也来自一个select连接呢?
INSERT INTO <your new table> (newTableItem)
    (SELECT Item
    FROM <table>
    GROUP BY Item
    HAVING COUNT(DISTINCT ProviderId) > 1)-- or just HAVING COUNT(*) > 1 if one Item can't have two times the same ProviderId
 SELECT [Item]      
      FROM [TABLE_NAME]
      GROUP BY [Item]
      HAVING COUNT(DISTINCT ProviderId) >1
    GO