2009-05-12 5 views
0

Ich habe ein Paar SQL Server-Tabellen.SQL-Abfrage Parent-Child distinct

P enthält ID und Name. PR enthält ID, Zinsrate, Tiernummer, Fromdate, Todate und P.ID. PR kann viele Zeilen enthalten, die pro Seite/Tier aufgelistet sind. (Ebenen sind eine Liste der Preise, die ein Produkt in einem bestimmten Zeitraum haben kann.)

Bsp .: Produkt 1 Tier 1 beginnt 1/1/2008 zu 1/1/2009 und hat 6 Preise gezeigt 1 Reihe pro Rate. Produkt 1 Tier 2 beginnt 1/2/2009 etc etc usw.

Ich brauche eine Ansicht auf diese, die zeigt die P.name und die PR.tiernumber und Daten ... ABER ich möchte nur eine Zeile, um die Stufe darzustellen.

Dies ist einfach:

SELECT DISTINCT P.ID, P.PRODUCTCODE, P.PRODUCTNAME, PR.TIERNO, 
    PR.FROMDATE, PR.TODATE, PR.PRODUCTID 
FROM dbo.PRODUCTRATE AS PR INNER JOIN dbo.PRODUCT AS P 
    ON P.ID = PR.PRODUCTID 
ORDER BY P.ID DESC 

Das sind die exakt richtigen Daten gibt mir ... Aber: dies nicht zulässt, mir die PR.ID zu sehen, wie das deutliche negieren würde.

Ich muss die Ergebnismenge begrenzen, weil der Benutzer nur eine Liste von Tiers sehen muss, muss ich die PR.ID sehen, die alle Daten anzeigt.

Irgendwelche Ideen?

+1

Was meinen Sie mit "Ich muss die PR.ID sehen"? WIE PR.ID, da es viele pro Reihe gibt, können Sie nur eine zeigen. Entweder haben Sie eine Zeile pro P.ID/Tier oder pro PR.ID. –

+0

Entschuldigung - Ich muss zu einer Anwendung eine eindeutige ID zurückgeben. Der Benutzer möchte alle Ebenen des Produkts sehen und dann in der Lage sein, einen Bereich auszuwählen, der auf dem Bildschirm besser ausgefüllt werden kann. Ich muss die Stufennummer des ausgewählten Elements finden und diese dann verwenden, um den Rest der Daten abzurufen ... aber die Anwendung kann mir nur die Stufennummer geben, wenn sie die eindeutige ID hat. –

Antwort

1
SELECT P.ID, P.ACUPRODUCTCODE, P.PRODUCTNAME, PR.TIERNO, 
    PR.FROMDATE, PR.TODATE, PR.PRODUCTID, MIN(PR.ID) 
FROM dbo.PRODUCTRATE AS PR INNER JOIN dbo.PRODUCT AS P 
    ON P.ID = PR.PRODUCTID 
GROUP BY P.ID, P.ACUPRODUCTCODE, P.PRODUCTNAME, PR.TIERNO, 
    PR.FROMDATE, PR.TODATE, PR.PRODUCTID 
ORDER BY P.ID DESC 

Soll die Arbeit machen. GROUP BY anstelle von DISTINCT, mit einer Zusammenfassungsfunktion (MIN), um einen bestimmten Wert für die PR.ID zurückzubekommen.

+0

Ja, das gibt einen bestimmten PR.ID-Wert zurück, aber aus der Frage des OP *, welcher * PR.ID-Wert er benötigt, ist nicht klar (es könnte nicht die MIN sein). Vielleicht wird er klären. –

+0

Ich dachte MIN in diesem Fall ein wenig mehr Sinn als SUM. ;-) –

+0

Sie Sir, sind ein Gelehrter und ein Gentleman. Probieren Sie es einfach aus und es funktioniert wunderbar. Vielen Dank. –

1

Es klingt, als ob Sie zwei verschiedene Dinge mit derselben Abfrage erreichen wollen, was keinen Sinn ergibt. Entweder Sie möchten eine Liste von Produkt-/Tier-/Datumsinformationen oder Sie möchten eine Liste von Zinssätzen.

Wenn Sie eine bestimmte PR.ID für Ihre Daten auswählen möchten, müssen Sie entscheiden, was die Regel dafür ist - was bestimmt, welche ID Sie zurückbekommen möchten?

+0

Tom, danke. Ja ich bin durch die Bewerbung eingeschränkt. Was ich mache, ist eine Ansicht, die die Optionen auf den Benutzer beschränkt, so dass sie nur sehen, dass ein Produkt 5 Ebenen hat. Wenn sie sich entscheiden, eine historische Schicht anzuzeigen, wählen sie die eine Option und dann hole ich alle Preise für diese Schicht ... Ich muss der Anwendung eine eindeutige ID anbieten, damit sie sie mir zurückgeben kann, damit ich die nächste ausführen kann holen. –