2016-09-20 3 views
-2
+---+------------+ 
| V | output  | 
+---+------------+ 
| y |   1 | 
| y |   2 | 
| y |   3 | 
| N |   0 | 
| y |   1 | 
| y |   2 | 
| N |   0 | 
| N |   1 | 
+---+------------+ 
+3

Sie können nicht. SQL-Tabellen repräsentieren * ungeordnete * Mengen. Sie benötigen also eine Spalte, die die Reihenfolge angibt, um das gewünschte Ergebnis zu erhalten. –

Antwort

0

Ihre Beispielausgabe ist etwas wie ein wenig komplex,

ich ein SQL recursive query für die Lösung des Problems Natürlich, verwenden Ich gehe davon aus, dass die ID-Säule von 1 beginnt und geht kontinuierlich ohne Spalt . In einem komplexeren Fall der row_number() Funktion sollte neben id-Feld hinzugefügt werden und kommen sollten, ist

Ich hoffe, es hilft,

--create table bool(id int identity(1,1), bool char(1)) 
--insert into bool values ('Y'),('N'),('Y'),('Y'),('Y'),('N'),('Y'),('N'),('N'),('Y'),('Y'),('Y'),('Y'),('Y'),('N'),('Y'),('Y') 

;with cte as (
    select id, bool curr, bool pre, 1 output from bool where id = 1 
    union all 
    select 
     bool.id, bool.bool curr, cte.curr, 
     case when bool.bool = cte.curr then cte.output + 1 else case when bool.bool = 'Y' then 1 else 0 end end 
    from cte 
    inner join bool on bool.id = cte.id + 1 
) 
select * from cte 

Output-Setup auf rownumbers wie folgt

enter image description here

3

Lassen Sie mich annehmen, dass Sie eine Spalte haben (sagen wir id), die die Bestellinformationen enthält. Dann möchten Sie Gruppen von "Y" s und "N" s identifizieren, die zusammen erscheinen und sie dann aufzählen.

Sie können dies einen Unterschied von Zeilennummern Trick:

select t.v, 
     row_number() over (partition by v, seqnum_id - seqnum_vid order by id) as output 
from (select t.*, 
      row_number() over (order by id) as seqnum_id, 
      row_number() over (partition v by order by id) as seqnum_vid 
     from t 
    ) t; 

erklären, wie das funktioniert in der Regel heikel ist. Ich empfehle, dass Sie die Unterabfrage ausführen, um zu sehen, wie die Sequenznummern aussehen und warum die Differenz für die Gruppen, die Sie identifizieren möchten, konstant ist.

Verwandte Themen