2013-09-23 3 views
0

Мы используем SQL Server 2008, образец таблицы ниже. Мне нужно запросить нижеследующую таблицу и дать мне результат ссылки, если не существует кода «C», но поскольку ссылка 957 ниже уже имеет код C, я не хочу вернуть 957 вообще, я просто хочу 950 и 955.sql select based from multiple values ​​

link      code 
--------------------------------- 
957       A 
957       B 
957       C 
957       D 
955       A 
955       B 
950       D 
950       E 

ответ

2

В случае, если вы не хотите использовать вложенный запрос, следующий будет также работать :

SELECT  link 
FROM  table 
GROUP BY link 
HAVING  SUM(CASE WHEN CODE = 'C' THEN 1 ELSE 0 END) = 0 
+0

SUM (CASE WHEN CODE = 'C' THEN 1 ELSE 0 END) = 0, потому что он не хочет 'C' –

+0

Да, спасибо. Мой ответ исправлен. –

+0

Это решение должно иметь лучшую производительность. –

0

вы можете использовать NOT EXISTS() на этом,

SELECT a.* 
FROM tableName a 
WHERE NOT EXISTS 
     (
      SELECT 1 
      FROM tableName b 
      WHERE a.link = b.link AND 
        b.code = 'c' 
     ) 

Но если вы просто хотите, чтобы получить link один,

SELECT DISTINCT a.link 
FROM tableName a 
WHERE NOT EXISTS 
     (
      SELECT 1 
      FROM tableName b 
      WHERE a.link = b.link AND 
        b.code = 'c' 
     ) 
1

Попробуйте на следующем примере:

SELECT DISTINCT link 
FROM TABLE 
WHERE link NOT IN (
     SELECT link 
     FROM TABLE 
     WHERE code LIKE 'C' 
     )