Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SELECT, как разбить результат на несколько ст.? Помогите составить запрос 
:(
    Опции темы
Unknown_Error
Дата 29.4.2006, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.1.2005

Репутация: нет
Всего: нет



Hi everybody!  smile 
Имеется таблица вида:
Код

0) id|class|value
---------------------
1) 01|00001|2
2) 02|00002|3
3) 03|00001|1
4) 02|00002|2
5) 01|00002|4
6) 01|00001|4

Результат должен быть следующим:
Код

0) id|SUM(00001)|SUM(00002)|SUM
-----------------------------------
1) 01|00006|00004|00010
2) 02|00000|00005|00005
3) 03|00001|00000|00001

Здесь должна быть группировка по id и должна выводиться сумма по 00001 классу и по 00002 классу на каждый id.
В последнем столбце должна выводиться сумма по первым 2-м столбцам.
Пытался сделать, что-то подобное:
Код

SELECT id, SUM(...), SUM(...) FROM MYTABLE WHERE ... GROUP BY id ORDER BY id;

Who knows?  smile  
PM MAIL ICQ   Вверх
AntonioBanderaz
Дата 1.5.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Код

CREATE TABLE #tmp (
  id INT(11),
  sum01 INT(11),
  sum02 INT(11),
  summ INT(11)
) ENGINE=MyISAM

CREATE PROCEDURE SUMDemo()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE id INT;
  DECLARE SUM01, SUM02 INT;
  DECLARE cur1 CURSOR FOR SELECT id FROM test.mytable GROUP BY id;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  
  OPEN cur1;
  REPEAT
    FETCH cur1 INTO id;
    IF NOT done THEN
       SELECT SUM(value) INTO SUM01 FROM test.mytable A WHERE A.class = 00001 AND A.id = id;
       SELECT SUM(value) INTO SUM02 FROM test.mytable A WHERE A.class = 00002 AND A.id = id;
       INSERT INTO #tmp(id, sum01, sum02, summ) VALUES(id, SUM01, SUM02, SUM01 + SUM02);
    END IF;
  UNTIL done END REPEAT;
  CLOSE cur1;
  SET @tmp = SELECT * FROM #tmp;
  TRUNCATE #tmp;
END


Вот как-то так это будет для 5.... На самом деле мож где-то ошибся... ))) 
как это использовать.
Код

CALL SUMDemo()
SELECT @tmp


ЗЫ. Это не самый лучший вариант... но как вариант мона использовать...  


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.