Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно? / 13 сообщений из 13, страница 1 из 1
02.11.2006, 11:11
    #34100009
point212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
Пытался уже задать этот вопрос... но видимо меня не поняли.

Работаю из Excel/VBA через ADO/OLEDB с базами в DBF. Т.е. синтаксис запросов, как я понимаю, OLE DB-шный (где найти по нему доки?).

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

Какой SQL-конструкцией возможно реализовать такой функционал?
...
Рейтинг: 0 / 0
02.11.2006, 12:35
    #34100445
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
DISTINCT выбирает уникальные ЗАПИСИ!!! а не поля в записях.
Вам больше подойдет GROUP BY + агрегатные функции.
...
Рейтинг: 0 / 0
02.11.2006, 13:39
    #34100760
point212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
Пробовал. Не выходит.
Дело в том, что нельзя написать
Код: plaintext
1.
2.
3.
4.
5.
SELECT 
    F1,F2,F3,F4,sum(F5) 
FROM 
    TABLE1
GROUP BY
    F4
Потому что драйвер будет ругаться что поля F1,F2,F3 должны входить в GROUP BY.

Как обойти эту ситуацию - я не придумал.
...
Рейтинг: 0 / 0
02.11.2006, 14:12
    #34100930
savosin_sergey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
а чем вас не устраивает такой запрос?:
Код: plaintext
1.
2.
3.
4.
5.
SELECT 
    F1,F2,F3,F4,sum(F5) 
FROM 
    TABLE1
GROUP BY
    f1, f2, f3, f4
...
Рейтинг: 0 / 0
02.11.2006, 15:35
    #34101352
point212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
savosin_sergeyа чем вас не устраивает такой запрос?:
Код: plaintext
1.
2.
3.
4.
5.
SELECT 
    F1,F2,F3,F4,sum(F5) 
FROM 
    TABLE1
GROUP BY
    f1, f2, f3, f4


А зачем мне группировать еще и по f1,f2,f3?
Мне ж их просто вывести надо.

Я не знаток SQL, и тем более не знаток тонкостей работы его реализаций. Посему я себе совершенно не представляю эффект от подобного запроса.

Сейчас проэксперементирую.

Мне тут подсказали функцию first(field), предназначенную чтобы взять значение первой записи в группировке. Да только все равно запрос считает цифры как-то не так :(
...
Рейтинг: 0 / 0
02.11.2006, 15:44
    #34101391
point212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
Попробовал. Не подходит :( Похоже что он сгруппировал вообще все записи, в которых хоть какие-то поля совпадают. Или что-то в этом роде :(
...
Рейтинг: 0 / 0
03.11.2006, 07:35
    #34102676
AsPiro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
point212Попробовал.Ты бы показал небольшую табличку для пояснения что у тебя есть и что ты хочешь получить, может и другие смогут попробовать...
...
Рейтинг: 0 / 0
03.11.2006, 10:07
    #34102975
point212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
AsPiro point212Попробовал.Ты бы показал небольшую табличку для пояснения что у тебя есть и что ты хочешь получить, может и другие смогут попробовать...
Да вот в этой теме пытался.

Таблички у меня две:REPORT и SUMMARY_DATA.
SUMMARY_DATA собирается из 4х UNION'ами.
В обоих табличках есть по три поля для связи. Плохо только то, что в обоих таблицах комбинации этих трех полей не уникальный. То есть могут быть две записи одинаковые по всем трём полям. Причем как в первой таблице, так и во второй.

Надо сделать что-то вроде этого:
(в голове все сразу не могу уместить, синаксис SQL не соблюдён)
SUMMARY_DATA=SELECT NOMK_LS,CPFS,SERNUMB,SUM(KO_ALL),SUM(FS_ALL) FROM (тут UNION'ы...) GROUP BY NOMK_LS,C_PFS,SERNUMB
(с этим вроде бы проблем нет)
REPORT=SELECT * FROM REPORT GROUP BY NOMK_LS,CPFS,SERNUMB
( но так вроде бы нельзя, поэтому я и пытаюсь выяснить как сделать сабж )
Теперь значится я хочу получить
RESULT=SELECT REPORT.*, SUMMARY_DATA.KO_ALL,SUMMARY_DATA.FS_ALL FROM
REPORT JOIN SUMMARY_DATA ON REPORT.NOMK_LS=SUMMARY_DATA.NOMK_LS,REPORT.CPFS=SUMMARY_DATA.C_PFS,REPORT.SERNUMB=SUMMARY_DATA.SERNUMB
Ну и напоследок надо как-то объеденить REPORT с RESULT, чтобы все записи были показаны, но только в первом вхождении каждой были данные в полях KO_ALL и FS_ALL.

Вот. Все бы так, да только не работает :( Потому что синтаксис SQL такого не позволяет или я не знаю как написат.
...
Рейтинг: 0 / 0
03.11.2006, 11:58
    #34103565
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
point212А зачем мне группировать еще и по f1,f2,f3?
Мне ж их просто вывести надо.Просто так, наверное. Тебе говорят уже в который раз, а ты лбом в стену упёрся.
"Просто вывести" без группировки? А если в этих полях РАЗНЫЕ значения, то что делать? Брать первую? Меньшую? Но это агрегаты. Значит, наверное, списком через запятую?
...
Рейтинг: 0 / 0
03.11.2006, 13:22
    #34103973
point212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
WildSery point212А зачем мне группировать еще и по f1,f2,f3?
Мне ж их просто вывести надо.Просто так, наверное. Тебе говорят уже в который раз, а ты лбом в стену упёрся.
"Просто вывести" без группировки? А если в этих полях РАЗНЫЕ значения, то что делать? Брать первую? Меньшую? Но это агрегаты. Значит, наверное, списком через запятую?
Да вроде бы нигде не упирался. Первое надо. Первое.
Да только вот first(fn) не катит. Совсем не те цифры получаются. Что-то он не то сворачивает, имхо :(
...
Рейтинг: 0 / 0
03.11.2006, 15:16
    #34104493
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
Запросом можно так
Код: plaintext
1.
2.
3.
4.
5.
select t.F4, sum(t.F5),
       (select first  1  F1 from Table1 where F4 = t.F4),
       (select first  1  F2 from Table1 where F4 = t.F4),
       (select first  1  F3 from Table1 where F4 = t.F4)
  from Table1 t
  group by  1 
Синтаксис зависит от сервера SQL который используешь.
Если поддерживается select from select, то ещё проще.
...
Рейтинг: 0 / 0
07.11.2006, 10:24
    #34108318
point212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
Боже мой, как страшно то. А если полей штук 20... это каким же тормозом станет запрос :(
...
Рейтинг: 0 / 0
07.11.2006, 15:42
    #34109444
g11111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно?
Если делаешь запросы из dbf, то логично и спрашивать на форуме FoxPro, а не у тех, кто в этом ничего не понимает.
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / SELECT * DISTINCT F1,F2,F3 FROM TABLE1. Возможно? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]