I have a table named Items containing a list of items both at grouped level (G) and sub level (L). However I want to see only the sub level (L) data but with the respective Group Name attached to each sublevel. The Grouped item has a start and end number range. The numbers are not +1 for the sub level list, but incremental in no particular fashion. Also for each level row the start and end number is same.
I am using Microsoft SQL-Server Management Studio-2018
Main table: Items
| Code | Start_No | End_No | Type |
|---|---|---|---|
| Group 1 | 1001 | 1035 | G |
| AA | 1001 | 1001 | L |
| BB | 1005 | 1005 | L |
| CC | 1009 | 1009 | L |
| DD | 1020 | 1020 | L |
| EE | 1035 | 1035 | L |
| Group 2 | 1051 | 1090 | G |
| FF | 1051 | 1051 | L |
| GG | 1060 | 1060 | L |
| HH | 1075 | 1075 | L |
| JJ | 1090 | 1090 | L |
| Group 3 | 1095 | 1200 | G |
| LL | 1095 | 1095 | L |
| OO | 1120 | 1120 | L |
| PP | 1200 | 1200 | L |
| Group 4 | 1300 | 1800 | G |
| 1300 | 1300 | L | |
| TU | 1500 | 1500 | L |
| WC | 1600 | 1600 | L |
| ZA | 1800 | 1800 | L |
I would like for the final output to be:
Desired outcome
| Code Group | Code | Start_No | End_No |
|---|---|---|---|
| Group 1 | AA | 1001 | 1001 |
| Group 1 | BB | 1005 | 1005 |
| Group 1 | CC | 1009 | 1009 |
| Group 1 | DD | 1020 | 1020 |
| Group 1 | EE | 1035 | 1035 |
| Group 2 | FF | 1051 | 1051 |
| Group 2 | GG | 1060 | 1060 |
| Group 2 | HH | 1075 | 1075 |
| Group 2 | JJ | 1090 | 1090 |
| Group 3 | LL | 1095 | 1095 |
| Group 3 | OO | 1120 | 1120 |
| Group 3 | PP | 1200 | 1200 |
| Group 4 | 1300 | 1300 | |
| Group 4 | TU | 1500 | 1500 |
| Group 4 | WC | 1600 | 1600 |
| Group 4 | ZA | 1800 | 1800 |
This is the code I have written but not getting desired result.
Select i.Code, c.Start_No, c.End_No
into #temp
FROM items i
Where i.Type = 'L'
Select i2.Code, i2.Start_No, i2.End_No
FROM GLM_CHART i2
WHERE
EXISTS (SELECT * FROM #temp t where t.Start_No BETWEEN i2.Start_No AND i2.End_No)
Thanks
Advertisement
Answer
You can use a join:
select i.*, ig.code
from items i join
items ig
on i.start_no >= ig.start_no and
i.end_no <= ig.end_no and
ig.type = 'G'
where i.type = 'L';