2011-09-20 71 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