Страница 1 из 1

сформировать запрос

Добавлено: 18 дек 2013, 11:49
парень
Добрый день форумчане.

Видимо моя голова не созданна для сложных запросов в SQL.

есть таблица balans в виде:

_id id_valut id_schet summa
1 1 1 500
2 2 1 1000
3 1 2 5000
4 2 2 10000

нужен запрос на вывод инфы по id_shet=xxx(это легко получается) + мне нужно чтобы считалась общая сумма по id_valut и в этом же запросе...

пример1. из моей таблицы при запросе where id_shet=1
id_valut summa summaALL
1 500 5500
2 1000 11000

пример2. из моей таблицы при запросе where id_shet=2
id_valut summa summaALL
1 5000 5500
2 10000 11000

Заранее благодарен!!!

пс. ссылками не закидывайте, часов 6 уже изучаю http://base.vingrad.ru/view/2871-Osnovyi-yazyika-SQL

Re: сформировать запрос

Добавлено: 18 дек 2013, 12:18
парень
по сути мне надо как то обьединить
SELECT id_val, SUM(summa) FROM ... GROUPBY id_val
и
SELECT id_val, summa, FROM... WHERE id_shet= xxx

голова взврывается... помогите

Re: сформировать запрос

Добавлено: 18 дек 2013, 13:11
trew
парень писал(а):по сути мне надо как то обьединить
SELECT id_val, SUM(summa) FROM ... GROUPBY id_val
и
SELECT id_val, summa, FROM... WHERE id_shet= xxx

голова взврывается... помогите
[syntax=sql]SELECT
B1.id_val, B1.summa, B2.summaALL
FROM balans B1
INNER JOIN
(SELECT id_val, SUM(summa) as summaALL FROM balans GROUP BY id_val) B2
ON B1.id_val = B2.id_val
WHERE B1.id_shet= xxx[/syntax]

Re: сформировать запрос

Добавлено: 18 дек 2013, 13:53
парень
Спасибо... но... у меня одна таблица... почему B1 и B2...
ща попробую...

Re: сформировать запрос

Добавлено: 18 дек 2013, 14:33
парень
СПАСИБО работает !!! теперь только прикрутить замену id_valuta на ValName из таблицы Valuts...

Re: сформировать запрос

Добавлено: 18 дек 2013, 15:17
парень
Огромное спасибо, разобрался с Вашей помощью. эх... столько времени потерял...

пс. "FROM balans B1" - разве не так ? "FROM balans AS B1"

Re: сформировать запрос

Добавлено: 18 дек 2013, 15:40
Foenix
и так и так можно

Re: сформировать запрос

Добавлено: 22 дек 2013, 15:28
парень
задача следующая.
есть две таблицы valuta
_id name
1 RUB
2 USD
3 EUR
4 CHN
...

и таблица balansTemp
_id id_val ...
1 1 ...
2 3 ...
3 4 ...

нужно вывести из первой таблицы valuta все строки где _id неравен id_val из таблицы balansTemp

например из данных таблиц должна вывестись только строка 2 (_id=2, name=USD)

пробую так:

Cursor c= mDB.rawQuery("SELECT name, _id FROM valuta WHERE _id<> ALL (SELECT id_val FROM balansTemp)", null);

выдает ощибку: (1) near "ALL": syntax error

если без ALL то строка "(SELECT id_val FROM balansTemp)" равна "1" и выводятся все строки кроме первой, а именно:
_id=2,name=USD
_id=3,name=EUR
_id=4,name=CHN

и дайте плз ссылку(если такая есть) на подробное описание запросов с множеством примеров SQL для андроида...

Re: сформировать запрос

Добавлено: 22 дек 2013, 17:05
trew
парень писал(а):задача следующая.
есть две таблицы valuta
Скачай на торренте:Основы программирования и баз данных.
Не бывает SQL для android.
Читай любые книжки по любым базам данных (MySQL, MS SQL, SQLite, PL/SQL)
основы языка SQL, как правило, одинаковые.


Уже приводил пример, чтобы соединить две таблицы нужно использовать
INNER JOIN, LEFT JOIN (остальное пока вам не нужно).

А затем писать условие WHERE.

Re: сформировать запрос

Добавлено: 22 дек 2013, 17:31
парень
trew писал(а): Читай любые книжки по любым базам данных (MySQL, MS SQL, SQLite, PL/SQL)
основы языка SQL, как правило, одинаковые.
тогда почему мой запрос скопированный с сайта(Основы SQL) что по ссылке в первом моем посте не работает.
Многострочные операторы сравнения:

IN - Равно любому члену списка;
ANY - Сравнение значения с любым значением, возвращаемым подзапросом;
ALL - Cравнение значения с каждым значением, возвращаемым подзапросом.

Например:
WHERE Column >ALL (SELECT Field FROM Table)
разве это не правильно ? но ALL в таком контексте не признается SQLLite у меня...
укажи на ошибку плз.
Уже приводил пример, чтобы соединить две таблицы нужно использовать
INNER JOIN, LEFT JOIN (остальное пока вам не нужно).
А затем писать условие WHERE.
[/quote]

[syntax=sql]String table = "valuta as VAL " +
" inner join balansTemp as BAL on BAL.id_val = VAL._id";
String columns[] = { "VAL._id as _id","VAL.name as name" };
String groupBy = "";
String where="VAL._id= ALL (SELECT id_val FROM balansTemp)";
Cursor c = mDB.query(table, columns, where, null, groupBy, null, null)
[/syntax]

вот... если без WHERE то выдает только те позиции которые !не нужны. а если знак равенства (в inner join balansTemp as BAL on BAL.id_val = VAL._id) поменять на "<>" то выводит кучу повторений ВСЕХ позиций в valuta...

помоги крайний раз плз )

Re: сформировать запрос

Добавлено: 22 дек 2013, 17:35
trew
VAL._id IN (SELECT id_val FROM balansTemp)
или
VAL._id NOT IN (SELECT id_val FROM balansTemp)
смотря что нужно.

Re: сформировать запрос

Добавлено: 22 дек 2013, 20:39
Foenix
парень писал(а): нужно вывести из первой таблицы valuta все строки где _id неравен id_val из таблицы balansTemp
и дайте плз ссылку(если такая есть) на подробное описание запросов с множеством примеров SQL для андроида...
запрос можно так написать
select * from valute where not exists
( select id_valute from balans where valute._id=balans.id_valute)

изучать нужнго следующий сайт http://www.sqlite.org/
имеются особенности в плане построения запросов. ОДнако, любой базовый учебник по базам данных подойдет.