Sql server 根据字段值的组合有条件地返回记录
我是这个论坛和sql的新手,希望有人能帮助我 我正在尝试创建一个查询,该查询将返回除一个字段外所有字段中值相等的记录 表中有以下字段: 零件号|年份|品牌|型号 我想返回一年(2011年)可用但另一年(2012年)不可用的所有记录。例如: 零件号|年份|品牌|型号Sql server 根据字段值的组合有条件地返回记录,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我是这个论坛和sql的新手,希望有人能帮助我 我正在尝试创建一个查询,该查询将返回除一个字段外所有字段中值相等的记录 表中有以下字段: 零件号|年份|品牌|型号 我想返回一年(2011年)可用但另一年(2012年)不可用的所有记录。例如: 零件号|年份|品牌|型号 123456 | 2011 |福特|福克斯 这一记录将会重现,因为没有123456 | 2012 |福特|福克斯的组合 但是,如果有2012年的记录,我不希望返回任何记录 零件号|年份|品牌|型号 123456 | 2011 |福特|
123456 | 2011 |福特|福克斯 这一记录将会重现,因为没有123456 | 2012 |福特|福克斯的组合 但是,如果有2012年的记录,我不希望返回任何记录 零件号|年份|品牌|型号
123456 | 2011 |福特|福克斯
123456 | 2012 |福特|福克斯
如果存在此情况,则不应返回任何记录 我希望我能解释清楚。如果我需要澄清任何问题,请告诉我 提前谢谢 编辑: 这个看起来对吗
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#
试一试
使用此设置代码
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
试一试
返回
part yr make model t2.yr
654321 2011 Opel Astra NULL
987654 2011 Dodge Charger 2010
@BinaryWorrier我在问题中没有看到这个要求。我想,但你只是把问题推迟一年,直到有三年的数据:)所有记录都在同一个表中。这会改变查询吗?@user955289:此查询只引用一个表。由于没有更好的名称,我选择将其命名为
YourTable
。这一个表引用了两个不同的别名(yt
和yt2
),但它是同一个表。嗨,乔-谢谢你的帮助。我将调整后的查询添加到我原来的帖子中。这看起来对吗?对不起,sql不会运行,已经修复了。所有记录都在同一个表中。这会改变查询吗?
PartNumber Year Make Model
654321 2010 Opel Astra
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