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