none
SQL Query zur Zahlennummerierung RRS feed

  • Frage

  • Hallo.

    Ich suche eine Möglichkeit, um die Zahlen von 0 bs 999 in einer Spallte (einer temp. Tabelle) auszugeben. Mein Ziel ist es eine Tabelle mit eigentlich durchgehenden Nummern, auf fehlende Einträge zu prüfen.

    Schöne Grüße

    De.Le

    Freitag, 8. April 2011 06:32

Antworten

  • Hallo ,

     

    eine Möglichkeit wäre

      Gruss Uli 

    declare @counter int
    set @counter = 0
    create table #mytable (nummer int)
    while @counter<1000
    begin
    /*
    Hier könntest Du auch gleich prüfen ob es einen Eintrag mit diesem
    Wert gibt
    */
    insert #mytable (nummer)values(@counter)
    set @counter = @counter + 1
    end
    

     

     

     


    Freitag, 8. April 2011 07:00
  • --erstellt die Zahlen von 0 bis 999 und speichert in die Tabelle t1
    use tempdb
    go
    ;with t2 as
    (
    	select 0 id
    	union all
    	select id = id + 1
    	from t2
    	where id < 999
    )
    select id into t1 from t2
    option ( maxrecursion 0 )
    go
    select id from t1
    go
    drop table t1
    go
    
    -- row_number
    use tempdb
    go
    create table t1(col1 nvarchar)
    go
    insert into t1 values('a'),('b'),('c'),('d'),('e')
    go
    select
    	row_number() over(order by col1) as 'rn', col1
    from t1
    go
    drop table t1
    go
    Freitag, 8. April 2011 07:30
  • Hallo,

    oder als rekursive Common Table Expression, wobei die maximal bis Werte (Rekursionstiefe) von 32.767 geht:

    ;WITH LfdNr

    AS (SELECT 1 AS ID

        UNION ALL

        SELECT ID + 1

        FROM LfdNr

        WHERE id < 1000)

    SELECT *

    FROM LfdNr

    OPTION (MAXRECURSION 1000);

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Freitag, 8. April 2011 07:31

Alle Antworten

  • Hallo ,

     

    eine Möglichkeit wäre

      Gruss Uli 

    declare @counter int
    set @counter = 0
    create table #mytable (nummer int)
    while @counter<1000
    begin
    /*
    Hier könntest Du auch gleich prüfen ob es einen Eintrag mit diesem
    Wert gibt
    */
    insert #mytable (nummer)values(@counter)
    set @counter = @counter + 1
    end
    

     

     

     


    Freitag, 8. April 2011 07:00
  • --erstellt die Zahlen von 0 bis 999 und speichert in die Tabelle t1
    use tempdb
    go
    ;with t2 as
    (
    	select 0 id
    	union all
    	select id = id + 1
    	from t2
    	where id < 999
    )
    select id into t1 from t2
    option ( maxrecursion 0 )
    go
    select id from t1
    go
    drop table t1
    go
    
    -- row_number
    use tempdb
    go
    create table t1(col1 nvarchar)
    go
    insert into t1 values('a'),('b'),('c'),('d'),('e')
    go
    select
    	row_number() over(order by col1) as 'rn', col1
    from t1
    go
    drop table t1
    go
    Freitag, 8. April 2011 07:30
  • Hallo,

    oder als rekursive Common Table Expression, wobei die maximal bis Werte (Rekursionstiefe) von 32.767 geht:

    ;WITH LfdNr

    AS (SELECT 1 AS ID

        UNION ALL

        SELECT ID + 1

        FROM LfdNr

        WHERE id < 1000)

    SELECT *

    FROM LfdNr

    OPTION (MAXRECURSION 1000);

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Freitag, 8. April 2011 07:31
  • Danke euch Jungs, für die schnellen und guten Antworten. Hat mir weiter geholfen.

     

    Scöhnes Wochenende

    de.le


    Freitag, 8. April 2011 15:58