distinct或group by by

我有一个查询来检索oracle数据库中某些表的数据。distinct或group by by

我最后需要的是获取所有不重复的数据,为此我需要所有没有相同FOLIO,TARJETA,CUENTA和IMPORTE的记录。 所以,为此,我尝试使用Distinct和Group,但我不知道脚本中应该使用哪个/如何使用它,以及它可能在哪里更有效。

我试图将GROUP BY与ORDER BY前面的值放在一起,但它表示“不是GROUP BY表达式”。我不想修改查询,只需删除重复的参数(FOLIO,TARJETA,CUENTA和IMPORTE)。

SELECT FOLIO_EXP, 

FOLIO,

DOC,

REFERENCIA,

TARJETA,

CUENTA,

NOMBRE,

IMPORTE,

IMP_REC,

IMP_REPRE,

IMP_QUEB,

FECHA_PAGO,

MCC,

COMERCIO,

PCC,

FECHA_COM,

ADQUIRENTE,

ESTADO,

"TIPO DE FRAUDE",

F_FRAUDE,

F_RECLAMO,

F_REEMBOLSO,

DICAMINO

FROM

(SELECT E.FOLIO_EXP,

A.FOLIO,

'D' AS DOC,

A.REFERENCIA,

A.TARJETA,

A.ACCT_NUM AS CUENTA,

B.NOMBRE_TH AS NOMBRE,

TO_CHAR(A.MONTO,'999,999.99') IMPORTE,

D.IMP_REC,

F.IMP_REPRE,

DECODE((A.MONTO -D.IMP_REC),NULL,A.MONTO,(A.MONTO -D.IMP_REC)) AS IMP_QUEB,

D.FECHA_PAGO,

A.SIC_CDE AS MCC,

A.COMERCIO,

C.PCC,

C.FECHA_COM,

C.ADQUIRENTE,

C.ESTADO,

'INTERNET' AS "TIPO DE FRAUDE",

A.FECHA_TRANS AS F_FRAUDE,

A.FECHA_RECLAMO AS F_RECLAMO,

A.FECHA_BONIFICACION AS F_REEMBOLSO,

A.USUARIO AS DICAMINO

FROM OPPF.T00EMISOR A

LEFT JOIN

(SELECT A.FECHA,

A.TARJETA,

C.PCC,

C.FECHA_COM,

C.ADQUIRENTE,

C.ESTADO

FROM

(SELECT TARJETA,

MAX(FECHA_INFO) FECHA

FROM OPPF.T00_PCC

GROUP BY TARJETA) A

LEFT JOIN

(SELECT FECHA_INFO,

TARJETA,

PCC,

FECHA_COM,

ADQUIRENTE,

ESTADO

FROM OPPF.T00_PCC)C ON(A.TARJETA = C.TARJETA

AND A.FECHA = C.FECHA_INFO)) C ON(TO_CHAR(C.TARJETA) = TO_CHAR(A.TARJETA))

LEFT JOIN

(SELECT MAX(SE_REVISO) SE_REVISO,

NOMBRE_TH,

TARJETA

FROM OPPF.T00CASOSRESUELTOS

GROUP BY TARJETA,

NOMBRE_TH) B ON(SUBSTR(A.TARJETA,1,16) = SUBSTR(B.TARJETA,1,16)

AND A.FECHA_BONIFICACION = B.SE_REVISO)

LEFT JOIN

(SELECT MAX(FECHA_PAGO) FECHA_PAGO,

TARJETA,

REFERENCIA,

COUNT(REFERENCIA) N,

SUM(MONTO_LIQ) AS IMP_REC--, FECHA_TRXS

FROM OPPF.T00_CC_RECUP

GROUP BY TARJETA,

REFERENCIA,

FECHA_TRXS) D ON(TO_CHAR(D.TARJETA) = TO_CHAR(A.TARJETA)

AND D.REFERENCIA = A.REFERENCIA)

LEFT JOIN

(SELECT TARJETA,

COUNT(TARJETA) TRANS,

COUNT(REFERENCIA) NR,

REFERENCIA,

SUM(IMPORTE) IMP_REPRE

FROM OPPF.T00_REPRESENTACIONES

GROUP BY TARJETA,

REFERENCIA) F ON(A.TARJETA = F.TARJETA

AND LPAD(TO_CHAR(A.REFERENCIA),23,'0') = LPAD(TO_CHAR(F.REFERENCIA),23,'0'))

LEFT JOIN

(SELECT MIN(FOLIO) FOLIO_EXP,

TARJETA,

FECHA_BONIFICACION

FROM OPPF.T00EMISOR --WHERE FECHA_BONIFICACION BETWEEN '02/09/2015' AND '31/12/2015'

GROUP BY FECHA_BONIFICACION,

TARJETA

ORDER BY FECHA_BONIFICACION,

TARJETA,

FOLIO_EXP) E ON(E.TARJETA = A.TARJETA

AND E.FECHA_BONIFICACION = A.FECHA_BONIFICACION)

WHERE A.ENTRY_MODE IN (' ',

'1',

'01',

'001',

'0',

'00',

'012',

'010',

'12',

'10',

'11',

'011'))

WHERE F_REEMBOLSO = '04/07/2017'

ORDER BY FOLIO,

REFERENCIA

回答:

你的情况,你不希望得到重复的结果,从而去你最好的选择是DISTINCT。

DISTINCT和GROUP BY至少有由(Oracle风格)没有什么区别:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:32961403234212

Normaly GROUP BY用于像MAX,MIN和其他聚合函数。不同的是只删除重复。

SQL服务器检测您是否没有聚合函数,并生成执行计划,就好像您只是使用“Distinct”一样。所以真的没什么大不同。

所以用DISTINCT你在这里用正确的概念。 希望这有助于。

以上是 distinct或group by by 的全部内容, 来源链接: utcz.com/qa/265708.html

回到顶部