2016-11-17 3 views
0

i haben temporäre Tabelle mit einem Satz von DatenIterate temporäre Tabelle in Chargen

----------------------------------------------------- 
| col1 | col2  | col3  | col4  | status| 
----------------------------------------------------- 
| a  | a12  | dd  | ff  | 1  | 
----------------------------------------------------- 
| b  | b43  | dd  | ff  | 2  | 
----------------------------------------------------- 
| c  | fe3  | dd  | ff  | 3  | 
----------------------------------------------------- 
| d  | fd2  | gg  | hh  | 1  | 
-----------------------------------------------------    
| e  | sf2  | gg  | hh  | 1  | 
----------------------------------------------------- 
| f  | vd2  | ii  | jj  | 3  | 
----------------------------------------------------- 
| g  | cd3  | ii  | jj  | 3  | 
----------------------------------------------------- 

ich in Chargen Tabelle verarbeiten, müssen einige der Zeilen auszuwählen.

dh

zuerst die Zeilen mit col3 = dd und col4 = ff betrachten und nur eine Zeile auswählen (i haben einen Algorithmus dieser Zeile auszuwählen), dann betrachten die Zeilen mit col3 = gg und col4 = hh und wähle onse, dann betrachte die Zeilen mit col3 = ii und col4 = jj und wähle eine Zeile aus.

Wie kann ich iterate durch meine temporäre Tabelle, um Teilmenge der Zeile und Prozess zu wählen.

Ich brauche eine Zeile aus jeder Teilmenge (Teilmenge mit col3 und col4) basierend auf Status Spalte.

Erwartetes Ergebnis: -


| col1 | col2  | col3  | col4  | status| 
----------------------------------------------------- 
| b  | b43  | dd  | ff  | 2  | 
-----------------------------------------------------  
| d  | fd2  | gg  | hh  | 1  | 
-----------------------------------------------------    
| f  | vd2  | ii  | jj  | 3  | 
----------------------------------------------------- 
+0

nicht auf Vorsatz klar. Eine einfache Where-Klausel in Ihrer Abfrage ermöglicht es Ihnen, eine Teilmenge der Daten in der obigen Tabelle abzurufen. Ich bin mir jedoch nicht sicher, ob dies Ihr Ziel ist. –

+0

Diese Frage fehlt Kontext. Es ist seltsam, mehrere Reisen zu einer Datenbank zu unternehmen, wenn Sie das Recordset einfach nach Ihrem Algorithmus ordnen könnten und Sie die Ergebnismenge an der Benutzeroberfläche oder in der Backoffice-Logik analysieren könnten. – xQbert

+0

Ich bin mir nicht sicher über die Daten in col3 und col4 und Noof Datensätze in meiner Temp-Tabelle. anstelle von mehreren Treffern auf DB, alle Daten in einer temporären Tabelle gesammelt und versucht, temporäre Tabelle zu verarbeiten. – Sahi

Antwort

0

Es hängt von dem Zweck und der Datenbank-Engine.

  1. Wenn Sie iterieren und Ändern von Daten in dieser Tabelle Sie Cursor verwenden können, während Schleife, CTE, rekursive Aktualisierung ...
  2. Wenn Sie iterieren wollen Objekte (Tabellen, Datenbanken) Sie Sytem foreach verwenden sollten, basierend Prozedur (zum Beispiel sp_MSforeachdb).
  3. Wenn Sie einen Wert erhalten möchten und nur etwas aus der nächsten Tabelle auswählen, sollten Sie die Funktion verwenden.
  4. Wenn Sie iterative Lösung möchten, können Sie den Cursor oder While-Schleife verwenden. Aber versuchen Sie, Ihren Plan zu überdenken, und versuchen Sie es mit einer Set-basierten Lösung (natürlich, wenn es möglich ist).
0

Sie können dies erreichen mit Fensterfunktionen, Partitionierung auf, was Satz von Spalten Sie eine bestimmte Zeile wollen:

declare @t table (ID int, TextValue nvarchar(10)); 
insert into @t values(1,'a'),(2,'a'),(3,'a'),(4,'b'),(5,'b'),(6,'b'),(7,'c'),(8,'c'),(9,'c'); 

select ID 
     ,TextValue 
from(select ID 
      ,TextValue 
      ,row_number() over (partition by TextValue order by ID) as rn 
    from @t 
) a 
where rn = 1;