Russian Qt Forum

Qt => Базы данных => Тема начата: fedya от Март 31, 2008, 11:19



Название: Разбить значение ячейки...
Отправлено: fedya от Март 31, 2008, 11:19
Приветствую.
Есть БД на SQLite, таблица Tbl1. У таблицы 2 столбца. DTime (VARCHAR) и Value (FLOAT).
Строки имеют вид (например):
          DTime                         Value
2008-03-01 00:00:00                9,1
2008-03-01 00:30:00                9,9
2008-03-01 01:00:00                9,3
2008-03-01 01:30:00                9,5
................................................
2008-03-31 23:30:00                12,2
2008-03-31 00:00:00                9,2
2008-03-31 00:30:00                6,2
2008-03-31 01:00:00                9,2
2008-03-31 01:30:00                9,2
................................................
2008-03-31 23:30:00                9,2

Как можно на QT при выводе информации пользователю представить данную таблицу в виде:

          2008-03-01     2008-03-01     2008-03-01     ............     2008-31-01
00:00        9,2                 9,2             9,2              ............          9,2
00:30        9,2                 9,2             9,2              ............          9,2
01:00        9,2                 9,2             9,2              ............          9,2
01:20        9,2                 9,2             9,2               ............         9,2
...
23:30       9,2                  9,2             9,2              ............           9,2


Название: Re: Разбить значение ячейки...
Отправлено: Tonal от Март 31, 2008, 11:37
В стандарте SQL нет такой фичи, чтобы получить подобное одним запросом.
В MS SQL и вроде в MS Access оно есть.

А так только двумя запросами - одним состав столбцов, вторым данные.


Название: Re: Разбить значение ячейки...
Отправлено: Вячеслав от Март 31, 2008, 11:38
Таки раз sqlite наверное проще всего через вторичную модель - пробегаешься по запросу с загоняешь данные в qstandarditemmodel , а ее уже показывешь пользователю ....

Есть БД на SQLite, таблица Tbl1. У таблицы 2 столбца. DTime (VARCHAR) и Value (FLOAT).
Кстати, а оно уже типы научилось хранить ? Или как раньше - все текстом ?


Название: Re: Разбить значение ячейки...
Отправлено: Вячеслав от Март 31, 2008, 11:41
В стандарте SQL нет такой фичи, чтобы получить подобное одним запросом.
В MS SQL и вроде в MS Access оно есть.

А так только двумя запросами - одним состав столбцов, вторым данные.
ткни плиз где rtfm про m$Sql ? IMHO без sp такое вообще не сгородить .
И наверное не двумя , а n+1 где n число столбцов ?


Название: Re: Разбить значение ячейки...
Отправлено: Tonal от Март 31, 2008, 11:50
Гугли PIVOT, TRANSFORM.

Ну а с количеством запросов - ты же после выполнение первого количество столбцов знаешь.
Вот псевдокод:
Код:
select
  (select Value from Tbl1 where DTime = cast('2008-03-01 ' || TIME_ONLY as TIMESTAMP)),
  (select Value from Tbl1 where DTime = cast('2008-03-02 ' || TIME_ONLY as TIMESTAMP))
  ...
from Tbl1
group by TIME_ONLY
где TIME_ONLY - это кусок из DTime в котором только время.
Вложенные селекты повторяешь столько раз, сколько получилось дат в первом запросе.
Так что можно безо всяких sp. :-)

P.S. Ну а можно вообще безо всех этих замут отсортировать данные по DTime и за один проход руками заполнить табличку. :-)


Название: Re: Разбить значение ячейки...
Отправлено: Вячеслав от Март 31, 2008, 12:03
Ясно ;) Пойду гляну ;)

А sqlite уже select'ы такие тянет ?

PPS а вариант с таблицей IMHO тут самый прямой ;)


Название: Re: Разбить значение ячейки...
Отправлено: fedya от Март 31, 2008, 12:15
Таки раз sqlite наверное проще всего через вторичную модель - пробегаешься по запросу с загоняешь данные в qstandarditemmodel , а ее уже показывешь пользователю ....

Есть БД на SQLite, таблица Tbl1. У таблицы 2 столбца. DTime (VARCHAR) и Value (FLOAT).
Кстати, а оно уже типы научилось хранить ? Или как раньше - все текстом ?

А фиг знает, я текстом храню


Название: Re: Разбить значение ячейки...
Отправлено: fedya от Март 31, 2008, 12:23
В стандарте SQL нет такой фичи, чтобы получить подобное одним запросом.
В MS SQL и вроде в MS Access оно есть.

А так только двумя запросами - одним состав столбцов, вторым данные.

Вот я также хотел делать.


Название: Re: Разбить значение ячейки...
Отправлено: ритт от Март 31, 2008, 12:46
n+1 джоинами, где n - число столбцов, отлично работает. только надо иметь в виду ограничение на 63 таблицы в одном запросе. если таблиц мало (как в данном случае), можно смело двиаться этим путём. такой запрос будет ожидаемо отрабатываться на разных скл.

есть альтернатива - group_concat/group by (для майскл) - нет ограничений на кол-во таблиц в запросе, зато group_concat в разных скл по-разному звучит


Название: Re: Разбить значение ячейки...
Отправлено: fedya от Март 31, 2008, 13:10
n+1 джоинами, где n - число столбцов, отлично работает. только надо иметь в виду ограничение на 63 таблицы в одном запросе. если таблиц мало (как в данном случае), можно смело двиаться этим путём. такой запрос будет ожидаемо отрабатываться на разных скл.

есть альтернатива - group_concat/group by (для майскл) - нет ограничений на кол-во таблиц в запросе, зато group_concat в разных скл по-разному звучит

Откуда скакать начинать??? Я раньше на QT не отображал данные с БД. Я так понимаю, что нужно использовать QSqlQueryModel, QTabWidget и ...?


Название: Re: Разбить значение ячейки...
Отправлено: ритт от Март 31, 2008, 13:36
тогда внимательно изучаем документацию, содержимое examples/sql и шевелим извилинами

если никто ничего добавить более не желает, полагаю, тема исчерпана

зы
если свяжешь QSqlQueryModel и QTabWidget, дай посмотреть...


Название: Re: Разбить значение ячейки...
Отправлено: fedya от Март 31, 2008, 14:15
тогда внимательно изучаем документацию, содержимое examples/sql и шевелим извилинами

если никто ничего добавить более не желает, полагаю, тема исчерпана

зы
если свяжешь QSqlQueryModel и QTabWidget, дай посмотреть...
Спасибо. Если свяжу ;) обязательно выложу


Название: Re: Разбить значение ячейки...
Отправлено: Tonal от Март 31, 2008, 16:23
В стандарте SQL нет group_concat-а. :-(
Так что на том же птице его не поиспользуешь.
Да и в SQLite тож не припомню...


Название: Re: Разбить значение ячейки...
Отправлено: ритт от Март 31, 2008, 18:51
в стандарте нет, но но функции есть
аналогичные функции точно есть в свежих склайт и птице в девел-ветке


Название: Re: Разбить значение ячейки...
Отправлено: Alex03 от Апрель 01, 2008, 06:48
fedya
Ещё есть такой извращённый способ:
Если поменять столбцы со строками то кол-во столбцов будет жесткое (но большое) - 48
Далее генерится запрос с 48-мью столбцами, и если сервер его скушает то вуаля :)



Название: Re: Разбить значение ячейки...
Отправлено: Tonal от Апрель 01, 2008, 07:17
2 Константин Это ты LIST для птица имел в виду?
Тады да, есть. :)