Frage

Ich versuche, einen Bericht in Kristall 11 Erstellen von Berichten auf der Grundlage dieser SQL-Abfrage

SELECT *
FROM (Tabelle) OM, (Tabelle) OL, (Tabelle) C
WO OM.ORDER = OL.ORDER
UND OM.COMPANY = C.COMPANY
AND (exists (SELECT *
FROM (Tabelle) OSD (Tabelle) OSDD
            WO OSD.ORDER = OL.ORDER
UND OSD.LINE = OL.LINE
UND OSD.REVISION = OL.REVISION
UND OSD.DIM = OSDD.DIM
UND OSDD.SHAPE = OL.SHAPE))

dachte ich, den besten Weg war zu starten, indem Sie den Hauptbericht mit den ersten beiden Tabellen zu erstellen und einen subreport zu schaffen mit dem Abschnitt der Abfrage „exists“ und Verknüpfung zurück zum Hauptbericht.
Meine Details Abschnitt enthält sowohl Daten aus dem Hauptbericht und dem subreport. Ich erhalte die richtigen Ergebnisse zurück zu, wo der subreport einen Wert zurückgibt, aber ich möchte in der Lage, den Detailabschnitt des Hauptberichts zu unterdrücken, wenn das subreport null ist, aber ich kann nicht einen Weg finden, die subreport in einem referenzieren die Auswahlformeln.
Ich bin offen für Vorschläge, wenn es eine bessere Art und Weise ist auch diese Abfrage zu imitieren.

War es hilfreich?

Lösung

Ich bin mir nicht sicher, ob, welche Art von Datenbank verwenden Sie, aber ich glaube, dass Sie wahrscheinlich so etwas wie verwenden können:

select * --you probably should narrow this down instead of using a *
from (table) OM
inner join (table) OL on OM.ORDER = OL.ORDER
inner join (table) C on OM.COMPANY = C.COMPANY
inner join (table) OSD on OSD.ORDER = OL.ORDER 
    and OSD.LINE = OL.LINE 
    and OSD.REVISION = OL.REVISION
    and OSD.DIM = OSDD.DIM
inner join (table) OSDD on OSDD.SHAPE = OL.SHAPE

Dies ist aus der Spitze von meinem Kopf und nicht getestet, aber die Idee ist, dass es alle Datensätze von OM, OL, C, OSD zeigen würde, und OSDD, wo es Übereinstimmungen gefunden. da Sie kein LEFT JOIN auf OSD oder OSDD verwenden, sollten Sie keine Null-Zeilen haben.

Allerdings konnte man immer diejenigen linken Außen ändern schließt sich wie:

select * --you probably should narrow this down instead of using a *
from (table) OM
inner join (table) OL on OM.ORDER = OL.ORDER
inner join (table) C on OM.COMPANY = C.COMPANY
left outer join (table) OSD on OSD.ORDER = OL.ORDER 
    and OSD.LINE = OL.LINE 
    and OSD.REVISION = OL.REVISION
    and OSD.DIM = OSDD.DIM
left outer join (table) OSDD on OSDD.SHAPE = OL.SHAPE

Dies würden Sie alle Zeilen von OM, OL und C und nur die Zeilen von OSD und OSDD wo es eine Übereinstimmung gefunden. Dann haben Sie eine Reihe von Optionen, um die Zeilen zu unterdrücken Sie nicht wünschen, so zu sehen, wie mit der er unterdrückt Formel im Abschnitt Experten als rexem vorgeschlagen.

Hope, das hilft.

Andere Tipps

Es gibt keinen Grund, einen subreport zu verwenden, wenn Sie keine Daten sehen wollen, wo der subreport null ist. Sie overcomplicating den Bericht.

Wenn Sie noch dies tun wollen, ermöglicht es dem Unterdrückt Attribut Ausdrücke. Sie müssten wahrscheinlich eine globalVar Variable verwenden, setzen Sie die Variable auf der Grundlage des subreport aber ich bezweifle es würde vor der Zeile wird angezeigt eingestellt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top