簡體   English   中英

如何使用具有多個子查詢的sql分組

[英]how to group by with a sql that has multiple subqueries

我正在嘗試通過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

有什么建議嗎?

嘗試這個:

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

WHERE語句結尾之后和ORDER BY語句之前添加GROUP BY SC_FRAMES.GROUPPRODUCTTYPE 還要更改您的AS值,使其不包含空格,因為我以前遇到過麻煩,因此請使用Product1而不是Product 1

我認為您想要這樣的查詢:

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

它根據發票日期用條件匯總替換子查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM