2017-02-28 3 views
1

Ich versuche, eine SQL für Peoplesoft zu schreiben, die die Anzahl der Zeiten hat, die Tabellen (RECNAME) in Abfragen von einem Benutzer über einen bestimmten Zeitraum verwendet wurden.Multiplizieren über Tabellen Peoplesoft/Oracle SQL

Von PSQRYRECORD kann ich QRYNAME & RECNAME (QRYNAME können mehrere RECNAME haben)

Von PSQRYSTATS abrufen I QRYNAME & EXECCOUNT (QRYNAME hat nur 1 EXECCOUNT) abrufen kann, die von OPRID & LASTEXECDTTM Filterung.

Aber das gibt mir zu hohen Mengen:

select A.RECNAME, Sum(B.EXECCOUNT) from FMSADM.PSQRYRECORD A, FMSADM.PSQRYSTATS B 
WHERE A.QRYNAME = B.QRYNAME 
AND A.OPRID = 'JDOE' 
AND B.LASTEXECDTTM BETWEEN to_date('01-JAN-16 00:00:00','DD-Mon-YY HH24:MI:SS') AND to_date('27-FEB-17 23:50:00','DD-Mon-YY HH24:MI:SS') 
GROUP BY A.RECNAME 
ORDER BY Sum(B.EXECCOUNT) DESC 

Ich glaube, ich brauche RECNAME zählen dann multiplizieren mit EXECCOUNT aber kann sie nicht arbeiten.

Dank!

Antwort

1

Das Problem besteht darin, dass PSQRYRECORD die gleiche Kombination OPRID, QRYNAME, RECNAME in mehr als einer Zeile haben kann. Wenn dies der Fall ist, wird Ihr execcount für diese Abfrage multipliziert. Sie müssen die eindeutige OPRID, QRYNAME, RECNAME von PSQRYRECORD abrufen und dann diese mit PSQRYSTATS

WITH QRYREC AS (
    SELECT OPRID, QRYNAME, RECNAME 
    FROM PSQRYRECORD 
    GROUP BY OPRID, QRYNAME, RECNAME 
) 
SELECT QRYREC.RECNAME, SUM(QS.EXECCOUNT) 
FROM QRYREC 
JOIN PSQRYSTATS QS ON QS.QRYNAME = QRYREC.QRYNAME 
WHERE 
QRYREC.OPRID = 'JDOE' 
AND QS.LASTEXECDTTM BETWEEN to_date('01-JAN-16 00:00:00','DD-Mon-YY HH24:MI:SS') AND to_date('27-FEB-17 23:50:00','DD-Mon-YY HH24:MI:SS') 
GROUP BY QRYREC.RECNAME 
ORDER BY SUM(QS.EXECCOUNT) DESC 
verbinden
Verwandte Themen