ROW-NUMBER über UNION Select
MSSQL 2008:
Ich hatte vorher eine Abfrage, nun brauche ich zwei Select's die mit UNION gemeinsam abgefragt werden.
Dazu verwendete ich im Select auch Row_Number um eine fortlaufende Nummer zu bekommen.
Diese Nummer brauch ich als eindeutige Zahl für ID und BSNR
Leider beginnt die Nummerierung ab dem zweiten Select wieder am Anfang.
SET @bsnr = @monat+RIGHT(@Jahr,2)+'0000'
select
CAST((@BSNR+(ROW_NUMBER() over(order by GLN))) AS CHAR(7))+(SUBSTRING((RIGHT(@Jahr,2)), 1, 2)) AS ID
,(@BSNR+(ROW_NUMBER() over(order by GLN))) AS BSNR
, Artikelnummer
, Menge
, GLN
from view_BSMenge
where KZ='A'
UNION
select
CAST((@BSNR+(ROW_NUMBER() over(order by GLN))) AS CHAR(7))+(SUBSTRING((RIGHT(@Jahr,2)), 1, 2)) AS ID
,(@BSNR+(ROW_NUMBER() over(order by GLN))) AS BSNR
, Artikelnummer
, Menge
, GLN
from view_BSMenge
where KZ='Z'
Hat jemand eine Idee wie ich die Nummerierung über beide Abfragen fortlaufend bekommen kann??
THX, Solardub
Ich hatte vorher eine Abfrage, nun brauche ich zwei Select's die mit UNION gemeinsam abgefragt werden.
Dazu verwendete ich im Select auch Row_Number um eine fortlaufende Nummer zu bekommen.
Diese Nummer brauch ich als eindeutige Zahl für ID und BSNR
Leider beginnt die Nummerierung ab dem zweiten Select wieder am Anfang.
SET @bsnr = @monat+RIGHT(@Jahr,2)+'0000'
select
CAST((@BSNR+(ROW_NUMBER() over(order by GLN))) AS CHAR(7))+(SUBSTRING((RIGHT(@Jahr,2)), 1, 2)) AS ID
,(@BSNR+(ROW_NUMBER() over(order by GLN))) AS BSNR
, Artikelnummer
, Menge
, GLN
from view_BSMenge
where KZ='A'
UNION
select
CAST((@BSNR+(ROW_NUMBER() over(order by GLN))) AS CHAR(7))+(SUBSTRING((RIGHT(@Jahr,2)), 1, 2)) AS ID
,(@BSNR+(ROW_NUMBER() over(order by GLN))) AS BSNR
, Artikelnummer
, Menge
, GLN
from view_BSMenge
where KZ='Z'
Hat jemand eine Idee wie ich die Nummerierung über beide Abfragen fortlaufend bekommen kann??
THX, Solardub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 415688
Url: https://administrator.de/forum/row-number-ueber-union-select-415688.html
Ausgedruckt am: 19.02.2025 um 21:02 Uhr
6 Kommentare
Neuester Kommentar
sicher.
test=*# select 'q1'||s::text from generate_series(1,6) s union all select 'q2'||s::text from generate_series(1,8) s;
?column?
----------
q11
q12
q13
q14
q15
q16
q21
q22
q23
q24
q25
q26
q27
q28
(14 rows)
test=*# select *, row_number() over() from (select 'q1'||s::text from generate_series(1,6) s union all select 'q2'||s::text from generate_series(1,8) s) bla;
?column? | row_number
----------+------------
q11 | 1
q12 | 2
q13 | 3
q14 | 4
q15 | 5
q16 | 6
q21 | 7
q22 | 8
q23 | 9
q24 | 10
q25 | 11
q26 | 12
q27 | 13
q28 | 14
(14 rows)
test=*#
Seltsame Begrüßung, aber Dir auch ein freundliches MSSQL 2008:,
Du brauchst gar kein union, die Abfragen sind ja gleich, bis auf die Kennzeichen. Reicht also, wenn Du Deine Bedingung anpaßt:
select
CAST((@BSNR+(ROW_NUMBER() over(order by GLN))) AS CHAR(7))+(SUBSTRING((RIGHT(@Jahr,2)), 1, 2)) AS ID
,(@BSNR+(ROW_NUMBER() over(order by GLN))) AS BSNR
, Artikelnummer
, Menge
, GLN
from view_BSMenge
where KZ in ('A', 'Z')
Gruß, Mad Max
Du brauchst gar kein union, die Abfragen sind ja gleich, bis auf die Kennzeichen. Reicht also, wenn Du Deine Bedingung anpaßt:
select
CAST((@BSNR+(ROW_NUMBER() over(order by GLN))) AS CHAR(7))+(SUBSTRING((RIGHT(@Jahr,2)), 1, 2)) AS ID
,(@BSNR+(ROW_NUMBER() over(order by GLN))) AS BSNR
, Artikelnummer
, Menge
, GLN
from view_BSMenge
where KZ in ('A', 'Z')
Gruß, Mad Max
Moin Solardub,
Du kannst Deine komplette Abfrage mit einer Klammer umschließen und dann in der From-Klausel wie eine Tabelle nutzen. Wichtig ist noch, daß Du Deiner neuen "Tabelle" noch einen Namen gibst, hier habe ich es einfach mal t genannt.
Die ID kannst Du bei den Einzelabfragen dann weglassen, oder mit in die endgültige ID verwursten.
Gruß, Mad Max
Du kannst Deine komplette Abfrage mit einer Klammer umschließen und dann in der From-Klausel wie eine Tabelle nutzen. Wichtig ist noch, daß Du Deiner neuen "Tabelle" noch einen Namen gibst, hier habe ich es einfach mal t genannt.
Die ID kannst Du bei den Einzelabfragen dann weglassen, oder mit in die endgültige ID verwursten.
SET @BSNR = @Monat+RIGHT(@Jahr,2)+'0000'
select row_number () over (order by irgendwas) as ID_Gesamt, *
from (select
CAST((@BSNR+(ROW_NUMBER() over(order by GLN))) AS CHAR(7))+(SUBSTRING((RIGHT(@Jahr,2)), 1, 2)) AS ID
,(@BSNR+(ROW_NUMBER() over(order by GLN))) AS BSNR
, Artikelnummer
, Menge
, GLN
from view_BSMenge
where KZ='A'
UNION
select
CAST((@BSNR+(ROW_NUMBER() over(order by GLN))) AS CHAR(7))+(SUBSTRING((RIGHT(@Jahr,2)), 1, 2)) AS ID
,(@BSNR+(ROW_NUMBER() over(order by GLN))) AS BSNR
, Artikelnummer
, Menge
, GLN
from view_BSMenge
where KZ='Z') t
Gruß, Mad Max