2016-07-28 94 views
1

I für Patienten greifen auszuwählen bin versucht, wo d11.xblood ein Minimalwert von d11.xpid gruppiert ist - und wo d11.xcaccess_type ist nicht 288, 289 oder 292. (d11.xblood ist eine chronologische Index von Zugriffen)Wählen Sie Spalte A Minimalwert aus dem Spalte B nicht in einem Array ist

  • d11.xpid. Patienten-ID (int)
  • d11.xblood: Unique chronologischen Index von Patienten Zugriffe (int)
  • d11.xcaccess_type: Unique Identifier für Zugriffe (int)

Ich möchte für jede d11.xpid eine Zeile melden, wo d11.xblood das Minimum ist (Erstzugangsdialog) für ihre jeweiligen d11.xpid. Außerdem mag ich die Zeile auszuschließen, wenn der anfängliche Zugang für ein d11.xpid einen d11.xcaccess_type Wert von 288 hat, 289 oder 292.

ich mehrere Variationen dieses in der Select Expert versucht:

{d11.xblood} = Minimum({d11.xblood},{d11.xpid}) and 
not ({d11.xcaccess_type} in [288, 289, 292]) 

Dieser wählt Zeilen mit dem ersten Zugriff korrekt aus, eliminiert jedoch Zeilen, in denen der aktuelle Zugriff nicht im Array ist. Ich möchte nur Zeilen entfernen, wo der initial Zugriff nicht im Array ist. Wie kann ich das erreichen?

Beispieltabelle:

xpid xblood xcaccess_type 
---- ------ ------------- 
1  98  400 
1  49  300 
1  152  288 
2  33  288 
2  155  300 
2  70  400 
3  40  300 
3  45  400 

Probe gewünschter Ausgang:

xpid xblood xcaccess_type 
---- ------ ------------- 
1  49  300 
3  40  300 

Siehe dass xpid = 2 nicht in der Ausgabe ist, weil sein Minimalwert von xblood ein xcaccess_type = 288 hatte, die ausgeschlossen ist. Auch sehen, dass, obwohl xpid = 1 eine xcaccess_type = 288 hat, weil es einen niedrigeren Wert von xblood für xpid = 1 ist, wo xcaccess_type not in (288,289,292) es noch enthalten ist.

+0

Können Sie bitte besser erklären? erster/aktueller Zugang? Was bedeutet das und was ist das? Dieser Code scheint gut für das zu sein, was Sie meiner Meinung nach erreichen möchten. – Furtiro

+0

Sie sollten eine Beispieltabelle mit dem, was Sie für die Beispielausgabe möchten, einschließen. Dies gibt uns einen besseren Kontext. – CodyMR

+0

Hinzugefügt ein wenig mehr Info. Lassen Sie es mich wissen, wenn ich etwas anderes klären kann. – Jackson

Antwort

0

Wenn Sie nicht über eine gespeicherte Prozedur oder benutzerdefinierte SQL schreiben wollen, dies zu umgehen, können Sie eine weitere Gruppe hinzuzufügen. Angenommen, Ihre tiefste Gruppe (die am nächsten Abschnitt Details) auf xpid basiert Sortierung, könnten Sie eine Gruppe innerhalb dieser eine hinzuzufügen, die die xcaccess_type vom niedrigsten zum höchsten sortiert.

Unterdrückt die Kopf- und Fußzeile für die neue Gruppe dann diese Klausel, um den Abschnitt Details hinzufügen:

({d11.xpid} = PREVIOUS({d11.xpid}) 
OR 
({d11.xcaccess_type} in [288, 289, 292]) 

Dies sollte Ihr Bericht immer nur zeigen die Aufzeichnungen mit dem niedrigsten Zugriffswert pro Person ändern. Und wenn der niedrigste Zugriffswert einer der drei verbotenen Werte ist, werden keine Datensätze für diesen xpid angezeigt.

+1

Danke für Ihre Hilfe, das Hinzufügen der 'xcaccess_type' Gruppierung innerhalb der' xpid' Gruppierung war das fehlende Stück! – Jackson