Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Открыть новую тему     Написать ответ в эту тему

snike555



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SerBUser
dneprcomp
UNION ALL нужен, так как просто UNION возможно ещё как-то отсортирует записи + автор не говорил что нужно бы убрать повторяющиеся записи.

Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 07:58 18-03-2010
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snike555

Цитата:
просто UNION возможно ещё как-то отсортирует записи  

расмешил

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 13:37 19-03-2010
snike555



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
greenpc
Ничего смешного, сам можешь убедиться, во всяком случае у меня такое было.

Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 13:41 19-03-2010
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snike555
да пожалуйста, думаешь говорю голословно?
_http://www.sql-tutorial.com/sql-union-sql-tutorial/

Цитата:
with table1 as
Select 2,5 from dual union all
Select 6,9 from dual union all
Select 9,89 from dual),
table2 as
Select 2,5          from dual union all
Select 6,9          from dual union all
Select 9,89         from dual union all
Select 1,1          from dual)
select * from table1 union all select * from table2


Код:
2,5
6,9
9,89
2,5
6,9
9,89
1,1
 
Ваш пример в студию

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 13:51 19-03-2010 | Исправлено: greenpc, 13:54 19-03-2010
Wahnsinn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
как отсортировать по текстовому полю, чтобы в случае числовых полей они сортировались в порядке их значений, а не как текст, к примеру  2,3, n001, 23 будут в обычной ситуации идти как n001, 2, 23,3 а хотелось бы n001, 2, 3, 23

Всего записей: 129 | Зарегистр. 20-01-2007 | Отправлено: 15:14 19-03-2010
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Wahnsinn
скажите хоть какая база.
для оракла dbms_session.set_nls('NLS_SORT','BINARY');
либо так  

Код:
with
  t as (
  select '2' str from dual union all
  select '3' from dual union all
  select 'n001' from dual union all
  select '23' from dual
  )
   
select  
  str,
  to_number(translate(str, abcdefghijklmnopqrstuvwxyz', '1234567890')) sOrder
from t
order by sOrder

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 15:45 19-03-2010 | Исправлено: greenpc, 16:01 19-03-2010
Wahnsinn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да это оракл, спасибо за информацию.  

Всего записей: 129 | Зарегистр. 20-01-2007 | Отправлено: 15:59 19-03-2010
snike555



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
greenpc
Да пожалуйста:

Код:
with table1 as  
(Select 2,5 from dual union all  
Select 6,9 from dual union all  
Select 9,89 from dual),  
table2 as  
(Select 2,5          from dual union all  
Select 6,9          from dual union all  
Select 9,89         from dual union all  
Select 1,1          from dual)  
select * from table1 union select * from table2

 
1    1
2    5
6    9
9    89
 
Я говорил что union вдобавок ещё и сортирует, поэтому если нужно объединить в нужном порядке нужно использовать union all.
 

Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 17:31 19-03-2010
Wahnsinn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
greenpc
глянул сейчас в pl/sql developer запрос

Код:
 
ALTER SESSION SET NLS_SORT = BINARY;
select inv_no from delivery order by INV_NO;
 

результат не тот, который бы хотелось, то есть если брать тот пример так и остаются n001, 2, 23, 3
а использование конструкции из to_number(translate(,,)) в случае кириллицы летит в ошибку ORA-01722:неверное число.
Понял ошибку в последнем случае - пробел забыл, но он выдает по извлеченным числам сортировку, а хотелось бы все же отдельных групп для полностью числовых записей и буквенно-цифровых.
 
PS. Задача отпала, важность реализации такой сортировки/или время реализации на стороне клиента/нагрузка  и тд не стоят того, если есть варианты с другими критериями.  

Всего записей: 129 | Зарегистр. 20-01-2007 | Отправлено: 18:06 19-03-2010 | Исправлено: Wahnsinn, 20:13 20-03-2010
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snike555
сорри ступил. думал о union all.
у union идет SORT UNIQUE

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 09:37 22-03-2010
snike555



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите создать запрос, который бы вывел данные в таком виде:
 
a                b                ID
___________________________
20.01.2010
21.01.2010    
              21.01.2010  435
22.01.2010
              22.01.2010  3456
23.01.2010
24.01.2010    
              24.01.2010  675
25.01.2010
              25.01.2010  5464
              25.01.2010  756
              25.01.2010  4564
              25.01.2010  4563
26.01.2010    
27.01.2010
28.01.2010    
              28.01.2010  5466
29.01.2010    
30.01.2010    
 
то есть в левой колонке период дат последовательно идет, в правой на следующей строке данные из таблицы на соответствующую дату слева
 
Добавлено:
oracle 9i

Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 14:28 26-03-2010
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snike555
Это нужно делать не на сервере а на клиенте. А так можно через процедуру.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 15:02 26-03-2010
Pleshey

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snike555
Запрос, я полагаю, можно сделать, только вот на а надо ограничения наложить
1 первый день
2 количество дней(включая первый и последний дни диапазона), или последний день.
3 максимально допустимое количество дней в диапазоне 1-2
 
Параметры 1 и 2, я так полагаю изменяемые и будут подставлятся в строку запроса. Остальное может сделать сервер.
В принципе, можно обойтись без 3 - зависит от того в какой среде будет генерится запрос, ну и других соображений.
 
Как вариант решения
 
select case when ID  is null then a else null end as a,
         case when ID  is null then null else a end as b,
         ID  
from (
  select num, Добавить_к_дате(StartDate , num -1, дней) <<-- формируешь последовательно даты>> as a  
        from( select num from Numerator where num <= days) snum
  left join (
              select b, ID  from bID  
              union all
              select distinct b, Null as ID from bID
             ) t  
  on snum.a=t.b
) t order by num, b
 
здесь Numerator - таблица с последовательностью чисел, начиная с 1, перекрывающих необходимый тебе диапазон. days - количество дней в выбранном диапазоне. StartDate - первый день диапазона - здесь также нужна функция типа Добавить_к_дате(StartDate , num -1, дней), которая будет прибавлять в первому дню диапазона номера из таблицы, таким образом создашь непрерывный диапазон дней в заданном диапазоне.  oraclе не юзаю, сам подберешь нужную.
Проверить запрос возможности не было, надеюсь грубых ошибок нет, мелкие сам поправишь.
Numerator можно сгенерить на лету - ну не знаю, учитывая, что тут рекомендуется сортировка по полю этой таблицы, может стоит ее создать с соответствующим индексом. да и для других запросов может пригодиться
 
Оптимизацией не занимался - написал так, что бы запрос легко читался.

Всего записей: 1 | Зарегистр. 27-03-2010 | Отправлено: 18:50 27-03-2010 | Исправлено: Pleshey, 23:48 27-03-2010
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snike555
если не критично +1 столбец

Код:
with
  t as (
  select '01.01.2000' dt, 1 id from dual union all
  select '01.01.2000', 2 id from dual union all
  select '02.01.2000', 3 id from dual union all
  select '03.01.2000', 3 id from dual union all
  select '03.01.2000', 4 id from dual union all
  select '04.01.2000', 5 id from dual
  )
  select dt a,   null b, null id, dt c from t  
union  
select  null a, dt as b, id, dt c  from t  
order by c , b desc

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 13:19 29-03-2010 | Исправлено: greenpc, 13:40 29-03-2010
snike555



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
greenpc
Pleshey
Спасибо, разобрался, сделал как посоветовали тут http://www.sql.ru/forum/actualthread.aspx?tid=746003

Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 14:25 29-03-2010
Omsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня база данных Firebird, я хочу занести запись в базу данных, клиент FlameRobin Database admin, пишу так:

Код:
insert into FRIENDS
values ('Андрей', 79274091728, 'Андрей с моей улицы');

 
И вот что сообщение пишет:
 

Цитата:
SQL Message : -802
Arithmetic overflow or division by zero has occurred.
 
Engine Code    : 335544321
Engine Message :
arithmetic exception, numeric overflow, or string truncation
numeric value is out of range
 
Total execution time: 0.032s

 
Ограничений нет, первое поле name - char, 30 символов, второе number - integer, третье char 50 символов.
Почему ошибка?
 

Всего записей: 898 | Зарегистр. 22-02-2007 | Отправлено: 14:12 05-05-2010
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Omsk
Число 79274091728 не влазит в integer.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 14:28 05-05-2010
Omsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
какой тогда тип данных писать туда, чтобы влез 11-значный номер сотовго оператора с дефисами?

Всего записей: 898 | Зарегистр. 22-02-2007 | Отправлено: 14:37 05-05-2010
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Omsk
Нужно использовать тип char или varchar.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 15:01 05-05-2010
Keiichi



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
 
Подскажите пожалуйста каким образом можно найти, в какой таблице в каком столбце и строчке хранится необходимая информация?
известно лишь, что именно должно быть написано.
 
Дело в том, что есть готовое веб-приложение, сделанное до меня.
соответственно есть и БД MSSQL 2000.
В веб приложении заносились данные, которые успешно хранятся в БД.
Но с не давнего времени необходимо создать запрос на эти данные, для сбора статистики. И проблема в том, что я не могу найти где это хранится... таблиц очень много.
 
Пытался придумать скрипт поиск с перебором последовательным всех таблиц и столбцов, но не смог реализовать.
Кто-нибудь может помочь, или направить в нужном направлении?
 
Заранее огромное спасибо!

----------
C уважением, Keiichi.

Всего записей: 696 | Зарегистр. 16-08-2004 | Отправлено: 15:54 21-05-2010
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru