Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 根据字段值的组合有条件地返回记录_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 根据字段值的组合有条件地返回记录

Sql server 根据字段值的组合有条件地返回记录,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我是这个论坛和sql的新手,希望有人能帮助我 我正在尝试创建一个查询,该查询将返回除一个字段外所有字段中值相等的记录 表中有以下字段: 零件号|年份|品牌|型号 我想返回一年(2011年)可用但另一年(2012年)不可用的所有记录。例如: 零件号|年份|品牌|型号 123456 | 2011 |福特|福克斯 这一记录将会重现,因为没有123456 | 2012 |福特|福克斯的组合 但是,如果有2012年的记录,我不希望返回任何记录 零件号|年份|品牌|型号 123456 | 2011 |福特|

我是这个论坛和sql的新手,希望有人能帮助我

我正在尝试创建一个查询,该查询将返回除一个字段外所有字段中值相等的记录

表中有以下字段:

零件号|年份|品牌|型号

我想返回一年(2011年)可用但另一年(2012年)不可用的所有记录。例如:

零件号|年份|品牌|型号
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