You can use the window function to find out the number of wavelengths for each sensorname / datetimeid combination:
WITH Data AS ( SELECT W.DateTimeID, S.SensorName, S.SensorType, W.Channel, W.PeakNr, W.Wavelength, [Wcount] = COUNT(*) OVER(PARTITION BY s.SensorName, d.DateTimeID) from tblWavelengths as W LEFT JOIN tblSensorWavelengths as SW ON W.tblWavelengthID = SW.WavelengthID LEFT JOIN tblSensors as S ON SW.SensorID = S.SensorID ) SELECT DateTimeID, SensorName, SensorType, Channel, PeakNr, WaveLength FROM Data WHERE Wcount = 2 ORDER BY DateTimeID;
ADDITION
As I thought, I realized that you can have two results for one sensor simultaneously with the same wavelength, which return 2 records, but do not have two different wavelengths. Since window functions do not support the use of DISTINCT , the alternative below
WITH Data AS ( SELECT W.DateTimeID, S.SensorName, S.SensorType, W.Channel, W.PeakNr, W.Wavelength, W.tblWaveLengthID from tblWavelengths as W LEFT JOIN tblSensorWavelengths as SW ON W.tblWavelengthID = SW.WavelengthID LEFT JOIN tblSensors as S ON SW.SensorID = S.SensorID ) SELECT d.DateTimeID, d.SensorName, d.SensorType, d.Channel, d.PeakNr, d.WaveLength FROM Data d INNER JOIN ( SELECT DateTimeID, SensorName FROM Data GROUP BY DateTimeID, SensorName HAVING COUNT(DISTINCT tblWaveLengthID) = 2 ) t ON t.DateTimeID = d.DateTimeID AND t.SensorName = d.SensorName ORDER BY d.DateTimeID;
GarethD
source share