2016-05-30 7 views
1

Ich muss am SQL-Tabelle in 4 gleiche Teile Partion Basierend auf einem bestimmten Contraint (Inhalt der Spalte) und erstellen Sie geeignete 4 Tabellen. Die Daten sehen so aus:Sql Abfrage zu partition eine Daten

Field1 | Field2 | Field3 
------------------------ 
d11  d12  d13 
d21  d22  d23 
d31  d32  d43 
d41  d42  d43 
d51  d52  d13 
d61  d62  d63 
d71  d72  d23 
d81  d82  d43 

Die Einschränkung ist Field3. Thas nach der Partie sollte ich 4 Tabellen bekommen

**Table1** 


    Field1 | Field2 | Field3 
    ------------------------ 
    d11  d12  d13 
    d51  d52  d13 

**Table2** 

Field1 | Field2 | Field3 
------------------------ 
d21  d22  d23 
d71  d72  d23 


    **Table3** 

    Field1 | Field2 | Field3 
    ------------------------ 
    d31  d32  d43 
    d41  d42  d43 
    d81  d82  d43 

**Table4** 

Field1 | Field2 | Field3 
    ------------------------ 
    d61  d62  d63 

Wie kann ich es tun? Ich dachte daran, group by zu verwenden und danach die Tabelle Zeile für Zeile zu durchsuchen. Ist es gut/oder gibt es eine bessere Lösung

+1

Können Sie die Logik erklären, mit der Sie die Zeilen zwischen den Tabellen getrennt haben? – Mureinik

Antwort

-2
CREATE TABLE Table1 AS (
SELECT field1, field2, field3 
FROM table 
where 
WHERE field3 = 'd13') 

CREATE TABLE Table2 AS (
SELECT field1, field2, field3 
FROM table 
where 
WHERE field3 = 'd23') 

....

+0

Er muss jedes Mal auf diese Weise manuell alle Partitionen durchsuchen. – sagi

+0

@sagi es ist 4 Tabellen, wie hart ist, wählen Sie eindeutig Feld3 aus der Tabelle – Paparazzi

+0

Das ist, wenn es immer 4 Partitionen sein wird, unabhängig vom ersten Satz. Und so dynamisch kann es niemals sein. – sagi

-1
DECLARE @total INT; 
DECLARE @iterator INT; 

SELECT @total = COUNT(0) 
FROM MyTable 
GROUP BY field3; 

SET @iterator = 1; 

WHILE @iterator <= @total 
BEGIN 
    SELECT s.field1,s.field2,s.field3 
    FROM(
    SELECT field1,field2,field3,DENSE_RANK() OVER(ORDER BY t.Field3) as rank 
    FROM MyTable) temp 
    WHERE s.rank = @iterator); 
    SET @iterator = @iterator + 1; 
END 

Dies sollten Sie Ihre gesamte Suchresultates geben.