I am trying to add a group by SC_FRAMES.GROUPPRODUCTTYPE to this statement:

SELECT
  SC_JOBS.CREATIONDATE,

  (SELECT SUM(SC_JOBS.GROSSEXCLVAT) FROM SC_JOBS WHERE SC_FRAMES.GROUPPRODUCTTYPE = 'ABC'    AND SC_FRAMES.JOBID = SC_JOBS.JOBSID AND SC_JOBS.INVOICEDATE < '1990-01-01') AS Product1,

  (SELECT SUM(SC_JOBS.GROSSEXCLVAT) FROM SC_JOBS WHERE SC_FRAMES.GROUPPRODUCTTYPE = 'XYZ'    AND SC_FRAMES.JOBID = SC_JOBS.JOBSID AND SC_JOBS.INVOICEDATE < '1990-01-01') AS Product2 

FROM
  SC_JOBS
INNER JOIN
  SC_FRAMES ON SC_FRAMES.JOBID = SC_JOBS.JOBSID
WHERE
  SC_JOBS.CREATIONDATE BETWEEN :StartDate AND :EndDate
ORDER BY
  SC_JOBS.CREATIONDATE

Any suggestions please?

有帮助吗?

解决方案

I think you want a query like this:

SELECT f.GROUPPRODUCTTYPE,
       MIN(j.CREATIONDATE),
       SUM(case when j.INVOICEDATE < '1990-01-01' then j.GROSSEXCLVAT else 0
           end) as Product1
FROM SC_JOBS INNER j JOIN
     SC_FRAMES f
     ON f.JOBID = j.JOBSID
WHERE j.CREATIONDATE BETWEEN :StartDate AND :EndDate
GROUP BY f.GROUPPRODUCTTYPE
ORDER BY min(j.CREATIONDATE);

It replaces the subqueries with conditional aggregation, based on the invoice date.

其他提示

Try this:

SELECT
  SC_JOBS.CREATIONDATE,
  (SELECT SUM(SC_JOBS.GROSSEXCLVAT) FROM SC_JOBS WHERE SC_FRAMES.GROUPPRODUCTTYPE = 'ATI'    AND SC_FRAMES.JOBID = SC_JOBS.JOBSID AND SC_JOBS.INVOICEDATE < '1990-01-01') AS Product 1,
  (SELECT SUM(SC_JOBS.GROSSEXCLVAT) FROM SC_JOBS WHERE SC_FRAMES.GROUPPRODUCTTYPE = 'ATI'    AND SC_FRAMES.JOBID = SC_JOBS.JOBSID AND SC_JOBS.INVOICEDATE < '1990-01-01') AS Product 2 
FROM
  SC_JOBS
INNER JOIN
  SC_FRAMES ON SC_FRAMES.JOBID = SC_JOBS.JOBSID
WHERE
  SC_JOBS.CREATIONDATE BETWEEN :StartDate AND :EndDate
GROUP BY
  SC_FRAMES.GROUPPRODUCTTYPE
ORDER BY
  SC_JOBS.CREATIONDATE

Add GROUP BY SC_FRAMES.GROUPPRODUCTTYPE after the end of your WHERE statement and before your ORDER BY statement. Also change your AS values to not include spaces as I've encountered ploblems with this in the past, so use Product1 as opposed to Product 1

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top