Имеется табличка (касса), содержащая движения по счету, в одном из столбцов в виде числа указывается к расходам или приходам относится операция.
Задача: в одном запросе получить выборку, чтобы в результате видеть колонку приходов и колонку расходов.
Запрос получился такой:
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');
С пощью него удалось решить задачу, однако с одной оговоркой, что в левой полутаблице должно быть больше записей чем в правой, иначе правая часть обрезается по количеству записей в левой.
можно как нибудь это побороть?