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)
是不安全的,因为索引编号中可能会有间隙,即使在我的情况下不会出现这种情况,但这是一种更加实用和通用的解决方案。谢谢你的更新。