提供 Main 组的子类型列表和范围编号
Provide a list of subtypes from Main group with range numbers
我有一个 table 命名的项目,其中包含分组级别 (G) 和子级别 (L) 的项目列表。但是,我只想查看子级别 (L) 数据,但每个子级别都附有相应的组名。分组项具有开始和结束编号范围。子级别列表的数字不是+1,而是以不特定的方式递增。同样对于每个级别行,开始和结束编号相同。
我正在使用 Microsoft SQL-Server Management Studio-2018
主要 table:项目
代码
Start_No
End_No
类型
第 1 组
1001
1035
G
AA
1001
1001
L
BB
1005
1005
L
CC
1009
1009
L
DD
1020
1020
L
EE
1035
1035
L
组 2
1051
1090
G
FF
1051
1051
L
GG
1060
1060
L
HH
1075
1075
L
JJ
1090
1090
L
第 3 组
1095
1200
G
LL
1095
1095
L
OO
1120
1120
L
PP
1200
1200
L
第 4 组
1300
1800
G
QQ
1300
1300
L
恩
1500
1500
L
厕所
1600
1600
L
ZA
1800
1800
L
我希望最终输出为:
期望的结果
代码组
代码
Start_No
End_No
第 1 组
AA
1001
1001
第 1 组
BB
1005
1005
第 1 组
CC
1009
1009
第 1 组
DD
1020
1020
第 1 组
EE
1035
1035
第 2 组
FF
1051
1051
第 2 组
GG
1060
1060
第 2 组
HH
1075
1075
第 2 组
JJ
1090
1090
第 3 组
LL
1095
1095
第 3 组
OO
1120
1120
第 3 组
PP
1200
1200
第 4 组
QQ
1300
1300
第 4 组
恩
1500
1500
第 4 组
厕所
1600
1600
第 4 组
ZA
1800
1800
这是我写的代码,但没有得到想要的结果。
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)
谢谢
您可以使用 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';
我有一个 table 命名的项目,其中包含分组级别 (G) 和子级别 (L) 的项目列表。但是,我只想查看子级别 (L) 数据,但每个子级别都附有相应的组名。分组项具有开始和结束编号范围。子级别列表的数字不是+1,而是以不特定的方式递增。同样对于每个级别行,开始和结束编号相同。
我正在使用 Microsoft SQL-Server Management Studio-2018
主要 table:项目
代码 | Start_No | End_No | 类型 |
---|---|---|---|
第 1 组 | 1001 | 1035 | G |
AA | 1001 | 1001 | L |
BB | 1005 | 1005 | L |
CC | 1009 | 1009 | L |
DD | 1020 | 1020 | L |
EE | 1035 | 1035 | L |
组 2 | 1051 | 1090 | G |
FF | 1051 | 1051 | L |
GG | 1060 | 1060 | L |
HH | 1075 | 1075 | L |
JJ | 1090 | 1090 | L |
第 3 组 | 1095 | 1200 | G |
LL | 1095 | 1095 | L |
OO | 1120 | 1120 | L |
PP | 1200 | 1200 | L |
第 4 组 | 1300 | 1800 | G |
1300 | 1300 | L | |
恩 | 1500 | 1500 | L |
厕所 | 1600 | 1600 | L |
ZA | 1800 | 1800 | L |
我希望最终输出为:
期望的结果
代码组 | 代码 | Start_No | End_No |
---|---|---|---|
第 1 组 | AA | 1001 | 1001 |
第 1 组 | BB | 1005 | 1005 |
第 1 组 | CC | 1009 | 1009 |
第 1 组 | DD | 1020 | 1020 |
第 1 组 | EE | 1035 | 1035 |
第 2 组 | FF | 1051 | 1051 |
第 2 组 | GG | 1060 | 1060 |
第 2 组 | HH | 1075 | 1075 |
第 2 组 | JJ | 1090 | 1090 |
第 3 组 | LL | 1095 | 1095 |
第 3 组 | OO | 1120 | 1120 |
第 3 组 | PP | 1200 | 1200 |
第 4 组 | 1300 | 1300 | |
第 4 组 | 恩 | 1500 | 1500 |
第 4 组 | 厕所 | 1600 | 1600 |
第 4 组 | ZA | 1800 | 1800 |
这是我写的代码,但没有得到想要的结果。
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)
谢谢
您可以使用 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';