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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2015, 16:41   #1
ven1dy
Новичок
Джуниор
 
Регистрация: 08.12.2015
Сообщений: 3
Вопрос Помогите написать запрос на бух отчёт

Добрый день.
Есть 2 таблицы(рис1), надо сделать такой запрос к sql, чтобы вывелась таблица №2(рис2)
Есть уже наработка кода, но не работает.
Выдает такую ошибку: #1054 - Unknown column 't1.id_good' in 'on clause'

Код:
SELECT t1.id_good,t1.product_name
    ,t2.sum_quantity_buying,t2.s_summ_good_buying 
    ,t3.sum_quantity_order,t3.s_summ_good_order
FROM
(
  SELECT id_good,product_name FROM buying
  UNION
  SELECT id_good,product_name FROM selling
  ) t1
LEFT JOIN
(
  SELECT id_good,product_name,SUM('quantity_buying') sum_quantity_buying,SUM('summ_good_buying') s_summ_good_buying
  FROM buying
  GROUP BY id_good,product_name
) t2
LEFT JOIN
(
  SELECT id_good,product_name,SUM('quantity_order') sum_quantity_order ,SUM('summ_good_order') s_summ_good_order
  FROM selling
  GROUP BY id_good,product_name
) t3
ON t1.id_good=t2.id_good
AND t1.product_name=t2.product_name
ON t1.id_good=t3.id_good
AND t1.product_name=t3.product_name
Изображения
Тип файла: jpg table1.jpg (22.8 Кб, 147 просмотров)
Тип файла: jpg table2.jpg (14.4 Кб, 135 просмотров)

Последний раз редактировалось Stilet; 08.12.2015 в 18:23.
ven1dy вне форума Ответить с цитированием
Старый 08.12.2015, 17:54   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

С помощью FULL JOIN, CASE и IsNULL без UNION и LEFT JOIN будет совсем проще
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.12.2015, 18:05   #3
ven1dy
Новичок
Джуниор
 
Регистрация: 08.12.2015
Сообщений: 3
Печаль

Цитата:
Сообщение от Аватар Посмотреть сообщение
С помощью FULL JOIN, CASE и IsNULL без UNION и LEFT JOIN будет совсем проще
Спасибо вам за ответ, жаль что я очень плохо знаком с JOIN.
Пойду учить какие то видео уроки, может соображу ответ)
ven1dy вне форума Ответить с цитированием
Старый 08.12.2015, 20:21   #4
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Зачем тут фулл? Left надо только не так.
come-on вне форума Ответить с цитированием
Старый 08.12.2015, 20:45   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну напиши с помощью LEFT JOIN короче и оптимальней. Наименования полей левые
Код:
SELECT U.id_good,U.product_name,
    SUM(U.KoliIn) AS KoliIn,SUM(U.SummIn) AS SummIn,
    SUM(U.KoliOut) AS KoliOut,SUM(U.SummOut) AS SummOut
  FROM
    (SELECT ISNULL(selling.id_good,buying.id_good) AS id_good,
         ISNULL(selling.product_name,buying.product_name) AS product_name,
         buying.Koli AS KoliIn,buying.Summ AS SummIn,
         selling.Koli AS KoliOut,selling.Summ AS SummOut
       FROM buying FULL JOIN selling ON selling.id_good=buying.id_good) U
  GROUP BY U.id_good,U.product_name
Если еще GROUP BY поддерживает выражение в списке ключей вида ISNULL(selling.id_good,buying.id_go od) (в чем сомневаюсь), то можно вообще без подзапроса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 08.12.2015 в 20:53.
Аватар вне форума Ответить с цитированием
Старый 08.12.2015, 22:04   #6
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

а что там писать
Цитата:
select p.id, p.product_name, m.model, sum(...) as zsum, ...
from prod p
inner join model m on ...
inner join zakupki z on ...
left join prodaji j on ...
group by p.id, p.product_name, m.model
другое дело что если таблицы изначально плохо сделаны, иначе все ок
come-on вне форума Ответить с цитированием
Старый 08.12.2015, 22:42   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Упс, как я лоханулся. Мой запрос не в дугу. Переделал
Код:
SELECT ISNULL(Z.id_prod,P.id_prod) AS id_prod,ISNULL(Z.Марка,P.Марка) AS Марка,ISNULL(Z.Модель,P.Модель) AS Модель,
    Z.Штук AS ШтукКуплено,Z.Сумма AS СуммаКуплено,P.Штук AS ШтукПродано,P.Сумма AS СуммаПродано
  FROM
    (SELECT id_prod,Марка,Модель,SUM(Штук) AS Штук,SUM(Сумма) AS Сумма FROM Закупки GROUP BY id_prod,Марка,Модель) Z
    FULL JOIN
    (SELECT id_prod,Марка,Модель,SUM(Штук) AS Штук,SUM(Сумма) AS Сумма FROM Продажи GROUP BY id_prod,Марка,Модель) P
    ON P.id_prod=Z.id_prod AND P.Марка=Z.Марка AND P.Модель=Z.Модель
Надеюсь не MySQL, там нет вроде FULL JOIN. Запрос из #6 очень сомнительный и вызывает массу вопросов. И навряд ли без UNION обойдешься. Имхо. Ладно, проехали
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 08.12.2015 в 22:50.
Аватар вне форума Ответить с цитированием
Старый 08.12.2015, 23:40   #8
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

так я и не писал, нет структуры чтобы что то конкретное писать, так идею накрапал
come-on вне форума Ответить с цитированием
Старый 09.12.2015, 12:43   #9
ven1dy
Новичок
Джуниор
 
Регистрация: 08.12.2015
Сообщений: 3
По умолчанию

Спасибо за помощь все работает)
ven1dy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите написать запрос qvernaut SQL, базы данных 6 26.11.2015 20:26
написать запрос, помогите Sadran SQL, базы данных 2 08.09.2015 12:49
Отчёт или запрос SQL??? Катёна Помощь студентам 2 22.04.2010 00:28
Проблема запрос + отчёт mendess01 Microsoft Office Access 1 20.04.2010 19:06
Помогите написать запрос l_m_l SQL, базы данных 2 10.10.2008 20:09