2013-11-26 3 views
1

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

ID Name Street Number Code 
100 John Street1 1   1234 
130 Peter Street1 2   1234 
135 Bob  Street2 1   5678 
141 Alice Street5 3   5678 
160 Sara Street1 3   3456 

Теперь мне нужен запрос, чтобы возвратить только последнюю запись, потому что его код является уникальным.

+1

какой из них следует «последний» запись? –

ответ

5

Вы можете определить, какие коды уникальны с запросом, который использует GROUP BY и HAVING.

SELECT [Code] 
FROM YourTable 
GROUP BY [Code] 
HAVING Count(*) = 1; 

Чтобы получить полные строки, которые соответствуют этой уникальной [Code] ценности, присоединиться к этому запросу обратно к столу.

SELECT y.* 
FROM 
    YourTable AS y 
    INNER JOIN 
    (
     SELECT [Code] 
     FROM YourTable 
     GROUP BY [Code] 
     HAVING Count(*) = 1 
    ) AS sub 
ON y.Code = sub.Code; 
+0

Спасибо HansUp, второй вопрос решил мою проблему! – Popopinsel

1

Благодаря HansUp, это мой последний вопрос прямо сейчас:

SELECT 
    A.* 
FROM 
    (T_NEEDED AS A 
INNER JOIN 
    (
    SELECT 
     CODE 
    FROM 
     T_NEEDED 
    GROUP BY 
     CODE 
    HAVING 
     Count(*) = 1 
    ) AS B 
ON 
    A.CODE = B.CODE) 
LEFT OUTER JOIN 
    T_UNNEEDED AS C 
ON 
    A.ID = C.ID 
WHERE 
    C.ID Is Null 
ORDER BY 
    A.NAME, 
    A.STREET, 
    A.NUMBER 

Объяснение: У меня есть две таблицы, одна с записями с идентификаторами, которые необходимы и один с теми ненужными. Необработанные идентификаторы могут быть в нужной таблице, и если они есть, я хочу, чтобы они были исключены, следовательно, LEFT OUTER JOIN. Затем приходит вторая часть, для которой был открыт вопрос. Я хочу исключить эти записи из необходимых идентификаторов, имеющих коды, которые не являются уникальными или также относятся к другим идентификаторам.

В результате получается таблица, содержащая только необходимые идентификаторы, и в этой таблице каждый код уникален.

0

Вы можете попробовать это с помощью КТР:

WITH tempTbl 
      AS (SELECT ROW_NUMBER() OVER (PARTITION BY code ORDER BY code) AS rownm, * 
       FROM  yourtable 
      ) 
    SELECT * FROM tempTbl WHERE code NOT IN (SELECT code FROM tempTbl WHERE rownm > 1) 
Смежные вопросы