2016-07-25 6 views
0

Rohdaten mit 2 Spalten Verwendung:ein Standard-Einzel SQL Gruppendaten (SQL Server)

0 33 
2 null 
0 44 
2 null 
2 null 
2 null 
0 55 
2 null 
2 null 
..... 

Ergebnisse Ich mag:

2 33 
2 44 
2 44 
2 44 
2 55 
2 55 
.... 

Kann ich eine SQL-Anweisung verwenden, um dies zu erreichen? (Rückkehr die Zeilen mit 2 nur, sondern füllen mit den Werten aus der vorherigen Reihe kommen, die 0 ist), könnte es viele ‚2 null‘ zwischen 0

+0

Sie gehen zu müssen, eine dritte Säule vorzusehen welches verwendet werden kann, um Dinge so zu ordnen, dass ein bestimmter Null-Datensatz mit einer Gruppe von "NULL" -Datensätzen verknüpft werden kann. –

+0

in welchem ​​DBMS bist du? –

+0

Sie können davon ausgehen, dass es eine ID-Spalte gibt, beginnend mit 1 – Zhongmin

Antwort

0

Auf diese Weise

with s as (
    select * 
    from 
    (values 
     (1,0,33 ), 
     (2,2,null), 
     (3,0,44 ), 
     (4,2,null), 
     (5,2,null), 
     (6,2,null), 
     (7,0,55 ), 
     (8,2,null), 
     (9,2,null) 
    ) T(id,a,b) 
) 
select s1.a, t.b 
from s s1 
cross apply ( 
    select top(1) s2.b 
    from s s2 
    where s2.id < s1.id and s2.b is not null and s2.a = 0 
    order by s2.id desc) t 
where s1.a = 2 
order by s1.id; 

I CROSS so apply Die Abfrage kann leicht erweitert werden, um andere Spalten aus der relevanten '0'-Zeile zu erhalten.

0

Zu allererst Auswahlwert für jede Zeile mit null:

SELECT col2 FROM (SELECT MAX(ID) FROM your_tbl t WHERE t.ID < ID AND col2 IS NOT NULL); 

Dann eine Bedingung für die Tabelle schreiben mit dieser Unterabfrage:

SELECT col1, (
    SELECT col2 FROM your_tbl where id = (SELECT MAX(ID) FROM your_tbl t 
    WHERE t.ID < tbl.ID AND col2 IS NOT NULL)) 
FROM your_tbl tbl WHERE col1 <> 0;