Консультация № 76722
21.02.2007, 10:59
0.00 руб.
0 11 3
Уважаемые эксперты, может вопрос покажется глупым, но прошу подсказать вот что: есть таблица в БД, которая обновляется по мере поступления заявок. Таблица обновляется из дбф файла, куда идет выгрузка из 1С. Смысл такой, что из этой таблицы нужно выбрать строки с совпадающими двумя столбцами. Т.е. в этой таблице есть 5 строк с 2-мя одинаковыми столбцами, но остальные столбцы разные, еще 10 строк с 2-мя одинаковыми столбцами (но отличные от последующих 5-ти) и т.д. Вопрос в том, как грамотно организовать выборку конкретных строк (сначала первых 5-ти, потом 10-ти и т.д.) по этим совпадающим столбцам? Условие WHERE avto=‘наименование‘ не подходит (каждый раз это разное наименование). Заранее спасибо!

Обсуждение

Неизвестный
21.02.2007, 11:07
общий
это ответ
Здравствуйте, Наталья Владимировна/ NatalyaDen!
Select * from table order by column1, column2
и у вас строки с одинаковыми значениями в этих двух столбцах стоят рядом.
А потом рабираете полученную выборку.
Узнать уникальные пары этих столбцов
Select column1, column2, count(*) as cntpair from table group by column1, column2
Неизвестный
21.02.2007, 11:39
общий
это ответ
Здравствуйте, Наталья Владимировна/ NatalyaDen!

Select * from table t1
inner join
(
select avto, Count(*) as cnt from table
group by avto
) t2 on t1.avto=t2.avto and t2.cnt>2
order by avto
Неизвестный
21.02.2007, 11:40
общий
сорри немного не то
Неизвестный
21.02.2007, 11:44
общий
select * from table t1inner join(select avto from table where column1=column2) t2 on t2.avto=t1.avtoorder by avto
Неизвестный
21.02.2007, 11:55
общий
это ответ
Здравствуйте, Наталья Владимировна/ NatalyaDen!

1) НАлицо ошибра в проектировании структуры данных.
2) Для начала нужно пометить строки у которых Col1=Col2Б потом у которых Col2=Col3 и так далее. Для чего используется запрос
Update Table Set RecType=1 where Col1=Col2;
Update Table Set RecType=2 where Col2=Col3;
.........

После чего можно делать выборку из таблицы используя группировку по типу строки
Select * from Table
Group by RecType

с использованием любых where
Неизвестный
21.02.2007, 12:12
общий
Сортировка - это понятно (сортирует все нормально), не совсем понятно с уникальностю. В принципе мне надо сформировать одну заявку на одну машину с определенным сотрудником. Т.е. из дбф файла в таблицу вываливаются строки со столбцами AVTO, SOTRUDNIK, ZAPCHAST, KOLICH. на 1 машину с сотрудником нужна куча запчастей (каждая запчасть идет отдельной строкой (пусть 10 строк), при этом в этих строках повторяются AVTO и SOTRUDNIK) - это в 1С-ке сформировали одну заявку. Потом формируют другую, там уже другие строки с полем AVTO и SOTRUDNIK с заказом на эту машину с водителем 5-ти запчастей (т.е получаем 5 строк с машиной и водителем и разнми запчастями и количеством). Так вот, мне эти заявки надо выбрать из этой таблицы в отдельную. А как написать select не знаю. Извините если сумбурно объясняю.
Неизвестный
21.02.2007, 13:31
общий
каждую заявку в новую таблицу ?
Неизвестный
21.02.2007, 14:10
общий
Честно говоря, не знаю пока как лучше сделать. Если каждую заявку в новую таблицу, то боюсь будет фигня. Мне хотя бы алгоритм запроса одной заявки на выборку этих строк из общей таблицы. Хотя может есть предложения как из общей таблицы выдернуть заявку и обеспечить ее судьбу в дальнейшем. Буду рада любым предложениям
Неизвестный
21.02.2007, 14:50
общий
Не понимаю почему перебор строк после сортировки по группировкам вас не устраивает(хотя это идеальный вариант для любой задачи с вашими исходными данными: и конкретную заявку выбрать с имеющимися водителем и машиной, и сформировать все заявки в виде отдельных документов например, и привязка всех строк заявки к какому то кортежу другой таблицы и т. д.). Если я правильно понял задачу - вам в любом случае либо перебирать строки общей таблицы, либо перебирать строки таблицы заявок(таблицы группировок из общей) и затем для каждой делать минизапросик типа select * from tabl where avto=&CurAvto and sotrudnik=&CurSotr.
Неизвестный
21.02.2007, 14:59
общий
Напишите конечную цель такой выбрки: там например разбить по двум таблицам - заголовки заявок, и соответствующие спецификации. В данном случае от результата плясать проще. Иначе обсуждение может зайти в тупик.
Неизвестный
21.02.2007, 15:22
общий
Прошу прощения за заморачивание и отнимание времени. После долгого совещания в отделе мы решили запросы в БД никакие не делать (пока), выборку из таблицы осущетвлять внешней обработкой на С# (будет пользовательская оболочка, по которой они будут работать с заявками. Спасибо всем огромное за отклики.
Форма ответа