2015-09-09 2 views
0

У меня есть две таблицы, страна и суммы:Как удалить некоторые похожие строки из таблицы?

+------+---------+ 
| code | country | 
+------+---------+ 
| 01 | France | 
| 02 | Germany | 
| 02 | Austria | 
| 03 | Belgium | 
| 04 | Belgium | 
| 04 | Spain | 
| 05 | Italy | 
+------+---------+ 

+------+-----+ 
| code | sum | 
+------+-----+ 
| 01 | 500 | 
| 02 | 400 | 
| 03 | 300 | 
| 04 | 200 | 
+------+-----+ 

Я хочу, чтобы создать код из суммы страны таблицы. Это очень легко, но мне нужно иметь точно такое же количество строк, как в таблице Sums.

+------+-----+---------+ 
| code | sum | country | 
+------+-----+---------+ 
| 01 | 500 | France | 
| 02 | 400 | Austria | 
| 02 | 400 | Germany | 
| 03 | 300 | Belgium | 
| 04 | 200 | Spain | 
| 04 | 200 | Belgium | 
+------+-----+---------+ 

Я хочу иметь в приведенной выше таблице уникальные значения кода. Поэтому мне нужно удалить некоторые из них, неважно, какой из них. Моя цель состоит в том, чтобы иметь только одну строку с тем же кодом. Например, строка

| 04 | 200 | Spain | 

может оставаться или быть удален. Как я могу это сделать?

+1

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

+0

Моя цель состоит в том, чтобы иметь только одну строку с тем же кодом. – maro

+0

так что «Испания» в вашем примере может быть в любом случае из стран, потому что я понимаю, что на самом деле это код и сумма? Если да, я предлагаю группу и максимальный или минимальный код. – cybork

ответ

1

Попробуйте это:

DELETE 
FROM code_sum_country 
WHERE code in 
(SELECT code 
    FROM code_sum_country 
    GROUP BY code 
    HAVING COUNT (code) > 1) 
AND country NOT IN 
(SELECT MIN(country) 
    FROM code_sum_country 
    GROUP BY code 
    HAVING COUNT (code) > 1) 

Это сохранит страну, имя которого минимум в алфавитном порядке.

Измените MIN(country) на MAX(country), если вы хотите сохранить максимальные значения.

Надеется, что это помогает :)

0

Я понимаю ваш вопрос таким образом, что результат на самом деле о коде и суммах, и пример страны желателен. Вероятно, чтобы дать больше смысла вашим результатам, и какая страна действительно вернулась, не имеет значения ... Поэтому я предлагаю группу и максимальный или минимальный код, а также максимальный или минимальный для страны. Смотрите ниже.

PS: возможно, было бы более полезно определить другое название, более значимое, чем страна. Но это прямо сказано без дополнительной информации :).

select 
min(code) as code 
,[sum] 
,min(country) as country 
from TableAA 
group by sum 
1

Если вы хотите запросить sums и получить одну произвольную страну, вы можете использовать коррелировала подзапрос:

select s.*, 
     (select top 1 c.country 
     from countries as c 
     where s.code = c.code 
     ) as country 
from sums as s; 
+0

Это очень полезный запрос. Я пробовал на выше таблицы, и он работает. Но у меня проблема с моей оригинальной таблицей. Я добавил 'INTO new_table' к вашему запросу и запустил его в Access. Через пять минут новый стол не был создан. Мой стол имеет около 20 тыс. Строк. Почему так долго? – maro

+0

Индекс на 'страны (код)' должен помочь. –

Смежные вопросы