sql-server - SQL - 根据列查找公共(public)行(相交)

标签 sql-server sql-server-2008 tsql

给出下表:

已安装的应用程序

MachineName | AppName | Version
-------------------------------
machine01   | App01   | 1.1
machine01   | App02   | 1.0
machine01   | App03   | 1.5
machine02   | App04   | 2.0
machine02   | App02   | 1.0
machine02   | App01   | 1.1
machine03   | App06   | 7.9.9
machine03   | App01   | 1.1
machine03   | App07   | 11.5
machine03   | App02   | 1.0

我需要选择给定“n”台机器通用的应用。它是“n”组之间的交集。但是,我很难想出一个像样的查询。

我知道我可以做这样的事情:

SELECT AppName, Version 
FROM InstalledApps 
WHERE MachineName = 'machine01'

INTERSECT

SELECT AppName, Version 
FROM InstalledApps 
WHERE MachineName = 'machine02' 

那会给我

AppName | Version
------------------
App01   | 1.1
App02   | 1.0

但是,有没有一种方法可以让我不必预先知道机器的数量就可以做到这一点?有点像

SELECT...... 
FROM InstalledApps 
WHERE MachineName IN ('machine01',...'machine99')

最佳答案

我认为这应该适用于一般情况:

SELECT AppName, Version, COUNT(DISTINCT(MachineName)) AS MachineCount
FROM InstalledApps
GROUP BY
  AppName, Version
HAVING
  COUNT(DISTINCT(MachineName)) > 1

关于sql-server - SQL - 根据列查找公共(public)行(相交),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818067/

相关文章:

sql-server - SQL 在作为 SP 执行时挂起,但作为 SQL 则正常

sql - 在 SQL Server 中检查临时表中是否存在列总是返回 false

sql-server - 在 T-SQL 中,如何获得一列 2 小数点(或百分比)?

sql - 父子层次结构,按名称排序

使用 CAST 或 CONVERT 时 SQL Server 错误 "Conversion failed"

sql-server - 通过经典 ASP 从另一个存储过程调用存储过程时出现问题

c# - 必须在 C# 中声明标量变量

sql - 无法在 where 子句中使用临时列?

sql-server - 关于识别需要创建哪些索引的任何建议?

sql-server - SQL Server 过滤索引