Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2014, 21:53   #1
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию вывод суммы SQL-запрос

есть две таблицы:
table1 (query1) - n, name;
table2 (query2) - n, n1, subj, score.
в первой таблице указаны имена учеников, а во второй - оценки по предметам.
нужно просуммировать эти оценки и вывести в первую таблицу.
Код:
Query1.SQL.Add('SELECT SUM (score) as score FROM "H:\db\table2.db" GROUP BY N');
тут возникла проблема.
сумма считается нормально, но при выводе в первую таблицу выводится только столбец score. Столбцы n, name убираются.
как сделать, чтобы к столбцам n и name добавлялся столбец с суммами score, т.е. чтобы таблица 1 имела вид - n, name, score.
пробовал объединять через union пишет ошибку type missmatch expresion как-то так. типа не соответствуют структуры таблиц.
Sanchezzz825 вне форума Ответить с цитированием
Старый 09.04.2014, 21:57   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

SELECT N,[name],SUM (score) as score FROM "H:\db\table2.db" GROUP BY N,[name]
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.04.2014, 21:57   #3
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
SELECT N,[name],SUM (score) as score FROM "H:\db\table2.db" GROUP BY N,[name]
не помогло.
выдает ошибку invalid use keyword token [name],
Sanchezzz825 вне форума Ответить с цитированием
Старый 10.04.2014, 22:06   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А, там же две таблицы. Ну так попробуй, что там парадокс скажет
Код:
SELECT U1.N,U1.Name,
    (SELECT SUM(score) FROM "H:\db\table2.db" U2 WHERE U2.N=U1.N) AS score
  FROM "H:\db\table1.db" U1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 10.04.2014 в 22:14.
Аватар вне форума Ответить с цитированием
Старый 10.04.2014, 23:35   #5
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию

не совсем понял что такое U1,2
Sanchezzz825 вне форума Ответить с цитированием
Старый 11.04.2014, 01:05   #6
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А, там же две таблицы. Ну так попробуй, что там парадокс скажет
Код:
SELECT U1.N,U1.Name,
    (SELECT SUM(score) FROM "H:\db\table2.db" U2 WHERE U2.N=U1.N) AS score
  FROM "H:\db\table1.db" U1
так он выводит в таблицу 1, то что надо, т.е. N, Name, Score.
но в Score не выводится сумма.

а если сделать так:
Код:
SELECT tab1.N, tab1.Name,(SELECT SUM (Score) FROM tab2) as Score FROM tab1');
то он также как надо выводит таблицу и выводит значения в Score.
но выводит общую сумму вообще по Score, а не каждому ученику свою сумму, что в принципе понятно, потому что нет группировки по N.

если же приписать группировку:
Код:
SELECT tab1.N, tab1.Name,(SELECT SUM (Score) FROM tab2 GROUP BY N) as Score FROM tab1');
то вылезает ошибка single row subquery produced more than one row.
Sanchezzz825 вне форума Ответить с цитированием
Старый 11.04.2014, 07:32   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Умничает парадокс? А так
Код:
SELECT U1.N,U1.Name,SUM(U2.score) AS score
  FROM "H:\db\table1.db" U1
    LEFT JOIN "H:\db\table2.db" U2 ON U2.N=U1.N
  GROUP BY U1.N,U1.Name
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.04.2014, 09:25   #8
Sanchezzz825
Пользователь
 
Регистрация: 04.07.2013
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Умничает парадокс? А так
Код:
SELECT U1.N,U1.Name,SUM(U2.score) AS score
  FROM "H:\db\table1.db" U1
    LEFT JOIN "H:\db\table2.db" U2 ON U2.N=U1.N
  GROUP BY U1.N,U1.Name
спасибо большое, работает.
Sanchezzz825 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запрос на вывод максимального и минимального значения pr1me222 Microsoft Office Access 6 14.06.2013 21:52
Запрос на вывод только года из даты SQL TommyG SQL, базы данных 5 26.12.2012 22:42
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
SQL запрос на подсчет суммы неотрицательных чисел таблици бд xxxsas SQL, базы данных 2 05.02.2009 23:40