簡體   English   中英

Oracle SQL-訂單表

[英]Oracle SQL - order table

我是Oracle SQL的新手,下面有一張表格。

TABLE NAME : ORDERS
CNUM     AMT    SNUM
1001     1000   2001
1002     2000   2002
1001     1500   2001
1001     500    2001

僅需要從上表中獲取cnum(客戶編號)由3 snum(銷售人員)提供服務的那些數據

謝謝你阿西特

這樣的東西?

select cnum, count(*), sum(amount)  
  from orders
 group by cnum
having count(*) > 3

不確定您需要什么-匯總結果或每一行。 如果需要每一行,請嘗試以下一行:

select * from (
select a.*, count(*) over(partition by cnum) cnt  
  from orders a
) 
where  cnt > 3

您可以使用分析功能ROW_NUMBER

例如,

SQL> WITH DATA AS(
  2  SELECT t.*, row_number() OVER(PARTITION BY cnum ORDER BY snum) rn FROM t
  3  )
  4  SELECT cnum, amt, snum FROM DATA
  5  WHERE rn >=3;

      CNUM        AMT       SNUM
---------- ---------- ----------
      1001       1500       2001

SQL>

根據您的樣本數據,以上給出的結果包括cnum的3 snum,如果要大於3,則將>=替換為>

WITH tab
     AS (SELECT 1001 CNUM, 1000 AMT, 2001 SNUM FROM DUAL
         UNION ALL
         SELECT 1002, 2000, 2002 FROM DUAL
         UNION ALL
         SELECT 1001, 1500, 2001 FROM DUAL
         UNION ALL
         SELECT 1001, 500, 2001 FROM DUAL)
  SELECT cnum
    FROM tab
GROUP BY cnum
  HAVING COUNT (*) >= 3;

如果只需要cnum和snum,則可以執行以下女巫,部分取自Rusty的答案:

WITH tab
     AS (SELECT 1001 CNUM, 1000 AMT, 2001 SNUM FROM DUAL
         UNION ALL
         SELECT 1002, 2000, 2002 FROM DUAL
         UNION ALL
         SELECT 1001, 1500, 2001 FROM DUAL
         UNION ALL
         SELECT 1001, 500, 2001 FROM DUAL)
SELECT DISTINCT cnum, snum
  FROM (SELECT cnum, snum, COUNT (*) OVER (PARTITION BY cnum) RANK FROM tab)
 WHERE RANK >= 3;

您可以對不同的SNUM進行分組和計數:

select CNUM 
from ORDERS
group by CNUM
having count(distinct SNUM) > 3

暫無
暫無

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

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