Вы можете использовать агрегацию с предложением «иметь» с union all
для объединения двух операторов выбора как:
with tab(date, ref, received_qty, issued_qty, remarks) as
(
select '2017-07-01',112,5,0,'order' union all
select '2017-07-01',113,3,0,'order' union all
select '2017-07-02',112,0,4,'issue' union all
select '2017-07-02',112,2,0,'order'
)
select date, ref,
sum(issued_qty) as received_qty,
sum(received_qty) as issued_qty
from tab
group by date, ref
having min(remarks) = 'issue'
union all
select date, ref,
sum(received_qty) as received_qty,
sum(issued_qty) as issued_qty
from tab
group by date, ref
having min(remarks) = 'order'
order by date, ref;
Демо kbd>
Вам нужно будет выполнить несколько следующих действий:
gluSphere
«направлена» на фиксированную точку, чтобы переместиться вперед относительно сфера приближает вас к центру своей орбиты glTranslatef
gluSphere
вперед к точке, вокруг которой вы хотите, чтобы она вращалась glRotatef
в направлении, в котором вы хотите, чтобы сфера орбита glTranslatef
назад так же далеко, как вы пошли вперед Таким образом, ваша сфера остается на том же расстоянии от центра, но переводится «вокруг» на хорошей орбите.
glRotatef умножит текущую матрицу на матрицу вращения. Это может (с учетом правильного вектора) сделать то, что вы пытаетесь.
glTranslatef умножит текущую матрицу на матрицу перевода, которая будет эффективно «перемещать» объект, а не вращать его, так что это не будет тем, что вы хотите.
Переведите в сторону от центра, а затем поверните полностью