Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无需动态查询或相交即可提取表中的公共数据_Sql_Sql Server 2008 - Fatal编程技术网

Sql 无需动态查询或相交即可提取表中的公共数据

Sql 无需动态查询或相交即可提取表中的公共数据,sql,sql-server-2008,Sql,Sql Server 2008,我有以下车辆表: 我希望从中获得具有每个索引值的车辆id/名称,即以下结果 我做了一个动态查询,可以产生以下结果: select vehicleId,vehicleName from Vehicle where [Index] = 1 intersect select vehicleId,vehicleName from Vehicle where [Index] = 2 intersect select vehicleId,vehicleName from Vehicle where [I

我有以下
车辆
表:

我希望从中获得具有每个
索引值的车辆id/名称,即以下结果

我做了一个动态查询,可以产生以下结果:

select vehicleId,vehicleName from Vehicle where [Index] = 1
intersect
select vehicleId,vehicleName from Vehicle where [Index] = 2
intersect
select vehicleId,vehicleName from Vehicle where [Index] = 3
但是,我不能对所有可能的
索引
值使用动态查询


我需要一个涉及自连接或一些非动态SQL技术的解决方案来执行相同的操作。是否有可能?

使用
分组依据
查找
车辆ID、车辆名称
与每个
索引的组合

select vehicleId, vehicleName
from Vehicle
group by vehicleId, vehicleName
having count(distinct [index]) = (select count(distinct [Index]) from Vehicle)

也许CTE更清晰

WITH I_LIST AS (
  SELECT DISTINCT Index
  FROM Vehicle
)
SELECT V.VehicleId, V.VehicleName
FROM I_LIST
LEFT JOIN Vehicle V ON I_List.Index = V.Index
GROUP BY V.VehicleId, V.VehicleName
HAVING COUNT(I_List.Index) = (SELECT COUNT(*) FROM I_LIST)

count(distinct[index])>1给出了自本田和铃木两次出现以来的所有结果。它应该是“having count(distinct[IndexId])=MAX(IndexId)”。请更新您的答案,我将接受。:)请注意,
max(index)
是不安全的,因为索引编号中可能会有间隙,即使在我的情况下不会出现这种情况,但这是一种更加实用和通用的解决方案。谢谢你的更新。