Niederdrückabschnitt in Crystal Reports mit subreport
-
12-09-2019 - |
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.
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.