Задать вопрос
@digdream

Как сделать вывод из одной таблицы mysql в две колонки?

Имеется табличка (касса), содержащая движения по счету, в одном из столбцов в виде числа указывается к расходам или приходам относится операция.
Задача: в одном запросе получить выборку, чтобы в результате видеть колонку приходов и колонку расходов.
Запрос получился такой:
QR.SQL.Add('select t1.*,t2.* from (select  @i := @i + 1 AS `RowNumber`, kp.id as id,date(payment_date) as payment_date, pt.payment_name as oper_name, payment_text as oper_text, payment_amount as oper_sum, if (payment_type=1,"Приход","Расход") as operation '+
             ' from (SELECT @i:=0) AS `RowNumberTable`, kassa_payments kp left join kassa_payment_types pt on kp.payment_type_id=pt.id where payment_filial='+inttostr(selected_filial)+' and payment_type=1 and  date(payment_date) between "'+date2mysql(report_datestart.Text)+'" and "'+date2mysql(report_dateend.Text)+'"   order by payment_type, payment_date) as t1 '+
             'left outer join'+
             '(select  @j := @j + 1 AS `RowNumber`, kp.id as id2,date(payment_date) as payment_date2, pt.payment_name as oper_name2, payment_text as oper_text2, payment_amount as oper_sum2, if (payment_type=1,"Приход","Расход") as operation2'+
             ' from (SELECT @j:=0) AS `RowNumberTable`, kassa_payments kp left join kassa_payment_types pt on kp.payment_type_id=pt.id where payment_filial='+inttostr(selected_filial)+' and payment_type=-1 and date(payment_date) between "'+date2mysql(report_datestart.Text)+'" and "'+date2mysql(report_dateend.Text)+'"  order by payment_type, payment_date) as  t2 '+
             ' on t1.Rownumber=t2.Rownumber');


С пощью него удалось решить задачу, однако с одной оговоркой, что в левой полутаблице должно быть больше записей чем в правой, иначе правая часть обрезается по количеству записей в левой.
можно как нибудь это побороть?
  • Вопрос задан
  • 337 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@digdream Автор вопроса
пока придумался костыль в виде предшествующего запроса, считающего количество элементов в левом и правом кортеже и если в правом больше, то менять подзапросы местами, ставя более "толстый" на левое (первое) место
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
18 дек. 2024, в 13:22
30000 руб./за проект
18 дек. 2024, в 12:37
10000 руб./за проект
18 дек. 2024, в 12:22
5000 руб./за проект