1

これに対する解決策を見つけましたが、列の 1 つがサブクエリの場合、それを group by に含めるにはどうすればよいですか、それとも group by に含める必要がありますか。ここにクエリを貼り付けます。

SELECT s.customerid, s.denomid,
       (SELECT su.quantity
         FROM   stockupdations su
         WHERE  s.customerid = su.custid
         AND    s.denomid = su.denomid
         AND    s.curid = su.curid) AS cur_stock, c.name AS cus_name, d.denomname AS denom,
       cur.curcode AS currency
FROM   stock s
LEFT   JOIN customers c
ON     s.customerid = c.custid
LEFT   JOIN denomination d
ON     d.denomid = s.denomid
LEFT   JOIN currency cur
ON     cur.curid = s.curid
GROUP  BY s.denomid, s.customerid, c.name, d.denomname, cur.curcode
ORDER  BY s.customerid ASC
4

3 に答える 3

0

すべてを一度に行う必要はありません。クエリを複数に分割してみてください。サブクエリ、分析関数、またはその他の複雑なロジックは、外側のクエリからは単純な行のように見えます。(パフォーマンスについて心配する必要はありません。Oracle はそれを書き直し、意味があればすべてを 1 つのステップとして実行します。)

--Step 3
select [simple values]
from
(
  --Step 2
  select [insanity]
  from
  (
    --Step 1
    select [madness]
    from
    [impossible joins]
  )
)
group by [simple values]
于 2010-10-14T03:33:27.987 に答える
0

WITH ステートメントについてはどうでしょうか。

WITH tmp AS
(
    SELECT s.customerid, s.denomid,
           c.name AS cus_name,
           d.denomname AS denom,
           cur.curcode AS currency
    FROM   stock s
    LEFT   JOIN customers c
    ON     s.customerid = c.custid
    LEFT   JOIN denomination d
    ON     d.denomid = s.denomid
    LEFT   JOIN currency cur
    ON     cur.curid = s.curid
    GROUP  BY s.denomid, s.customerid, c.name, d.denomname, cur.curcode
    ORDER  BY s.customerid ASC
)
SELECT tmp.customerid, tmp.denomid,
       su.quantity,
       tmp.cus_name,
       tmp.denom,
       tmp.currency
FROM   tmp
INNER  JOIN stockupdations su
ON     tmp.customerid = su.custid
AND    tmp.denomid = su.denomid
AND    tmp.curid = su.curid
于 2010-10-13T07:08:23.307 に答える
0

from.よりも句で「内部クエリ」を使用できますselect

CUSTOMER テーブルと ORDER テーブルがあるとします。

私は次のようなものを持つことができます

SELECT C.CUSTOMER_ID, COUNT(T.ORDER_ID)
FROM CUSTOMERS C
JOIN (SELECT CUSTOMER_ID, ORDER_ID, ORDER_DATE, ORDER_STATUS FROM ORDERS O WHERE O.STATUS <> 'DECLINED') T
ON T.CUSTOMER_ID = C.CUSTOMER ID
GROUP BY C.CUSTOMER_ID

(このSQLは単なる例であり、これを書くためのより良い方法があることは知っていますが、すぐに他の例を思いつきませんでした)

于 2010-10-13T07:18:24.317 に答える