Ausgabe
Ich möchte den in das Zahlenfeld in Tabelle A geschriebenen Wert nehmen und herausfinden, welchem Bereich er in den Feldern für hohen und niedrigen Bereich in Tabelle B entspricht, und ihn wie in der Ergebnistabelle anzeigen. Wenn in mehr als einem Bereich, sollte es nehmen, was zuerst eintritt (B_id ist kleiner)
Ein Tisch
Hilfe | Nummer |
---|---|
1 | 10 |
2 | 50 |
3 | 60 |
4 | 52 |
zum Beispiel (Zahl = 10)
B-Tisch
Gebot | Niedrige Reichweite | Hohe Reichweite | Typ |
---|---|---|---|
1 | 5 | 30 | EINE KARTE |
2 | 35 | 55 | BCARD |
3 | 50 | 110 | KARTE |
zum Beispiel (niedriger Bereich >10 und hoher Bereich <10 das Ergebnis B_id = 1)
Ergebnistabelle
Ausweis | Nummer | Typ |
---|---|---|
1 | 10 | EINE KARTE |
2 | 50 | BCARD |
3 | 60 | KARTE |
4 | 52 | BCARD |
Lösung
Sie können das folgende SQL versuchen.
Der BETWEEN
wird verwendet, um die Bereiche zu finden, und ROW_NUMBER
hilft, den kleineren Wert zu erhalten.
create table tableA(a_id int, Number int)
insert into tableA values(1,10)
insert into tableA values(2,50)
insert into tableA values(3,60)
insert into tableA values(4,52)
create table tableB(b_id int, lowRange int, highRange int, Rtype varchar(10))
insert into tableB values (1,5,30,'ACARD')
insert into tableB values (2,35,55,'BCARD')
insert into tableB values (3,50,110,'CCARD')
;with CTE AS(
select a.a_id Id, a.Number, b.Rtype, ROW_NUMBER() OVER(PARTITION BY a.a_id ORDER BY LowRange) RN
from tableA A
inner join tableB B on A.Number between B.lowRange and B.highRange
)
select Id, Number, Rtype
from CTE
where RN = 1
drop table tableA
drop table tableB
Ausgabe:
Id Number Rtype
----------- ----------- ----------
1 10 ACARD
2 50 BCARD
3 60 CCARD
4 52 BCARD
Beantwortet von – DineshDB
Antwort geprüft von – Mary Flores (FixError Volunteer)