2017-02-03 3 views
0

Nachmittag, ich habe den folgenden SQL-Befehl:Geben Sie Spezifische Daten je nach Reihe Kriterien

SELECT INVOICE_ID, ITEM_ID, ORDER_NO, CLIENT_STATE VON CUSTOMER_ORDER_INV_JOIN WHERE ORDER_NO = '* 1007';

Dies zieht die folgenden Informationen aus:

[Bild Beschreibung hier eingeben] [1]

es eine spezifische Kriterien, die ich erreichen möchte, und das ist die folgende:

Auf Bestellung Nein: * 1007, Wenn Client-Status in allen Zeilen = PaidPosted, dann brauche ich eine andere Spalte, um 'PaidPosted' in allen Zeilen anzuzeigen. Allerdings auf Bestellnummer: * 1007, wenn Client-Status auf 4 Zeilen = 'PaidPosted' aber 1 oder mehr Zeilen = 'PostedAuth' dann brauche ich eine andere Spalte, in der alle Zeilen 'PostedAuth' zeigen. Wenn jedoch alle Zeilen NULL sind, brauche ich eine Spalte, in der alle Zeilen "Keine Rechnung" anzeigen.

Hoffentlich macht dies mehr Sinn.

+1

Geben Sie Beispieldaten und die erwartete Ausgabe dafür an. – GurV

+0

Hallo, ich dachte ich hätte. Was ich hier sehen möchte, ist nur PostedAuth, aber ich möchte das zum Beispiel zu PostedAuth1 ändern können. –

+0

* Ich möchte dies zu PostedAuth1 * ändern können - was meinst du damit? Es ist nicht so klar, wie Sie vielleicht denken. – GurV

Antwort

0

Ich denke, das wird Sie bekommen, was Sie brauchen. Sie können eine temporäre Tabelle erstellen, die Sortierreihenfolge hat:

CREATE TABLE #Sort_Order 
(myOrder INT, 
CLIENT_STATE NVARCHAR(20) 
) 

INSERT INTO #Sort_Order 
VALUES(1, 'Preliminary') 
INSERT INTO #Sort_Order 
VALUES(2, 'PostedAuth') 
INSERT INTO #Sort_Order 
VALUES(3, 'PaidPosted') 

Dann können Sie einfach es an den Tisch kommen und eine RANK-Funktion auf es wie so laufen:

SELECT 
A.*, 
DENSE_RANK() OVER (PARTITION BY A.ID 
        ORDER BY B.myOrder ASC) AS OrderRank 
FROM #Temp A 
INNER JOIN #Sort_Order B On (A.CLIENT_STATE = B.CLIENT_STATE) 
WHERE A.ID = 1 

Dies wird Ihnen geben Ergebnisse nach RANK und Sie können eine WHERE-Anweisung verwenden, um nur nach RANK zu filtern 1

Wenn Ihre Daten mehrere Zeilen desselben Client-Status haben, müssen Sie eine Art DISTINCT oder GROUP BY ausführen.

Verwandte Themen