在没有动态查询或相交的情况下提取表中的公共数据

时间:2016-09-23 13:34:35

标签: sql sql-server-2008

我有以下Vehicle表:

enter image description here

我希望车辆ID /名称包含每个Index值,即以下结果

enter image description here

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

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

但我无法使用包含所有Index值的动态查询。

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

2 个答案:

答案 0 :(得分:2)

使用group by查找每vehicleId, vehicleNameindex个组合:

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

答案 1 :(得分:0)

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)
相关问题