Страница: 1 |
Страница: 1 |
Вопрос: Помогите составить запрос
Добавлено: 24.05.06 03:59
Автор вопроса:
CyRax
| Web-сайт:
Фомируется табличка.
Необходимо построить запрос, который возврящает набор отвечающий условиям:
1. В каждой строке id1 должно быть уникальным.
2. Если в двух строчках один и тот же id1, надо выбрать ту строку, в которой id3 - минимально
3. Если у нескольких строк совпадает id1 и id3, можно выбрать любую.
В данном примере результат может быть таким (он не однозначен из-за 3 пункта)
1 1 1
2 1 1
3 1 1
4 1 5
5 10 3
*/
begin tran 111
SEt nocount on
CREATE TABLE #tab (
[ID1] [numeric](18, 0),
[ID2] [numeric](18, 0),
[ID3] [numeric](18, 0))
Insert Into #tab (id1, id2, id3) Values (1,1,1)
Insert Into #tab (id1, id2, id3) Values (1,0,1)
Insert Into #tab (id1, id2, id3) Values (1,3,2)
Insert Into #tab (id1, id2, id3) Values (2,1,1)
Insert Into #tab (id1, id2, id3) Values (2,-1,1)
Insert Into #tab (id1, id2, id3) Values (2,3,2)
Insert Into #tab (id1, id2, id3) Values (3,2,1)
Insert Into #tab (id1, id2, id3) Values (3,0,1)
Insert Into #tab (id1, id2, id3) Values (3,2,2)
Insert Into #tab (id1, id2, id3) Values (4,1,5)
Insert Into #tab (id1, id2, id3) Values (4,0,6)
Insert Into #tab (id1, id2, id3) Values (4,3,7)
Insert Into #tab (id1, id2, id3) Values (5,1,3)
Insert Into #tab (id1, id2, id3) Values (5,5,3)
Insert Into #tab (id1, id2, id3) Values (5,10,3)
SELECT * From #tab
-- Тут писать код
drop table #tab
Может быть что то типа
WHERE UNIQUE (SELECT ID3 FROM TBL WHERE ID3 > ALL)?
Сам sql-сервера не имею, поэтому, прежде чем пытаться адаптировать под VB, хотелось бы услышать мнение знатоков.
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа: User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #1
Добавлено: 24.05.06 11:10
http://www.sql.ru/articles/mssql/2005/030401SpeedUpSELECT_DISTINCTqueries.shtml
Номер ответа: 2
Автор ответа: HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 24.05.06 14:11
тут очень нехреновый запрос получится! Проще программно, ибо от такого запроса рехнуться можно
пукт 1 и 2 с трудом стыковываются
выборку без дубликатов по ид1, примерно так...
SELECT DISTINCT id1 FROM #tab
а дальше кошмар...
или куча вложенных select from + min... это теоретически, практически ничего неполучается
или своя ф-ция которая (на SO!) которая принимает 3 параметра и возвращает эту записть в случае совпадений условий при определённыом id1, id2, id3...
короче задача практически не поддаётся мозговому штурму (ИМХО), наверное проще полсе удаления дубликатов id1 далее выберать программно...
Номер ответа: 3
Автор ответа: CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #3
Добавлено: 24.05.06 21:15
В задании запрос начинается с "SELECT * From #tab", так что такой способ не подойдёт.