2011-09-20 75 views
0

我是这个论坛和SQL的新手,希望有人能够帮助我。根据字段值的组合条件返回记录

我想创建一个查询,将返回所有字段中除了一个字段具有相同值的记录。

我在表中具有以下字段:

零件号|年|制作|型号

我想回到那个在一年(2011年)是可用的所有记录,但在另一个不可用(2012年)。例如:

零件号|年|制作|型号
123456 | 2011 |福特|关注

这个记录将返回,因为没有123456 | 2012 |福特|焦点组合。

不过,我不希望任何的返回的记录,如果没有为2012年

零件号记录|年|制作|型号
123456 | 2011 |福特|关注
123456 | 2012 | Ford | Focus

如果存在此情况,则不应该返回记录。

我希望我解释得很好。如果我需要澄清任何问题,请告诉我。

在此先感谢!

编辑

这是否正确?

SELECT * 
FROM [mytable].[dbo].[apps] yt 
    WHERE yt.make in (47,54, 48, 59, 3, 42, 21, 67, 1168, 76, 40, 39) 
    and yt.model in (432, 2484, 16206, 2487, 6831, 5858, 659, 663, 2816, 688, 668, 670, 6089, 2427, 752, 21, 349, 356, 108, 883, 2440, 16227, 1011, 303, 6867, 110, 440, 975, 286, 287) 
    and yt.Year = 2011 
     AND NOT EXISTS(SELECT NULL 
          FROM [mytable].[dbo].[apps] yt2 
          WHERE yt.part# = yt2.part# 
           AND yt.make = yt2.make 
           AND yt.model = yt2.model 
           AND yt2.Year = 2012) 
order by part# 

回答

0
SELECT yt.PartNumber, yt.Year, yt.Make, yt.Model 
    FROM YourTable yt 
    WHERE yt.Year = 2011 
     AND NOT EXISTS(SELECT NULL 
          FROM YourTable yt2 
          WHERE yt.PartNumber = yt2.PartNumber 
           AND yt.Make = yt2.Make 
           AND yt.Model = yt2.Model 
           AND yt2.Year = 2012) 
+0

如果你已经3年? –

+0

@BinaryWorrier我没有看到这个问题的要求。 –

+0

嗯,我想,但你只是把问题关闭一年,直到有三年的数据:) –

0

尝试

SELECT c.PartNumber, c.Year, c.Make, c.Model 
FROM Cars c 
inner join 
(
    SELECT count(*) [count], PartNumber, Make, Model 
    from cars 
    GROUP BY PartNumber, Make, Model 
    HAVING count(*) = 1 
) as g 
ON c.PartNumber = g.PartNumber and c.Make = g.Make and c.Model = g.Model 

有了这个设置代码

create table Cars 
(partnumber nvarchar(20), [year] int, make nvarchar(20), model nvarchar(20)) 

insert into Cars 
select '123456', 2010, 'Ford', 'Focus' 
union 
select '123456', 2011, 'Ford', 'Focus' 
union 
select '654321', 2010, 'Opel', 'Astra' 

回报

PartNumber Year Make Model 
654321  2010 Opel Astra 
+0

对不起,sql不会运行,已修复它 –

0

尝试

SELECT t.PartNumber, t.Yr, t.Make, t.Model, t2.yr 
FROM cars t left outer join cars t2 on 
    t.PartNumber = t2.PartNumber 
    AND t.Make = t2.Make 
    AND t.Model = t2.Model 
    and t.yr <> t2.yr 
WHERE t.Yr = 2011 AND (t2.yr <> 2012 or t2.Yr is null) 

应该处理

part make model yr 
    123456 Ford Focus 2012 
    123456 Ford Focus 2011 
    654321 Opel Astra 2011 
    987654 Dodge Charger 2010 
    987654 Dodge Charger 2011 

返回

part yr  make model t2.yr 
654321 2011 Opel Astra NULL 
987654 2011 Dodge Charger 2010 
+0

所有的记录都在同一个表中。这会改变查询吗? – user955289

+0

不行,应该没事 – Beth