0

我正在尝试将 SC_FRAMES.GROUPPRODUCTTYPE 的组添加到此语句中:

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

请问有什么建议吗?

4

3 回答 3

0

我想你想要这样的查询:

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);

它根据发票日期用条件聚合替换子查询。

于 2013-09-19T10:45:22.107 回答
0

尝试这个:

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
于 2013-09-19T10:27:12.030 回答
0

GROUP BY SC_FRAMES.GROUPPRODUCTTYPE在您的陈述结束之后和您的WHERE陈述之前添加ORDER BY。还将您的AS值更改为不包含空格,因为我过去遇到过这个问题,所以使用Product1而不是Product 1

于 2013-09-19T10:29:11.980 回答