提供来自 Main 组的子类型列表以及范围编号

Posted

技术标签:

【中文标题】提供来自 Main 组的子类型列表以及范围编号【英文标题】:Provide a list of subtypes from Main group with range numbers 【发布时间】:2021-06-18 17:56:06 【问题描述】:

我有一个名为 Items 的表,其中包含分组级别 (G) 和子级别 (L) 的项目列表。但是,我只想查看子级别 (L) 数据,但每个子级别都附加了相应的组名称。分组项具有开始和结束编号范围。子级别列表的数字不是+1,而是以无特定方式递增。同样对于每一层行,开始和结束编号是相同的。

我正在使用 Microsoft SQL-Server Management Studio-2018

主表:项目

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
QQ 1300 1300 L
TU 1500 1500 L
WC 1600 1600 L
ZA 1800 1800 L

我希望最终输出为:

期望的结果

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 QQ 1300 1300
Group 4 TU 1500 1500
Group 4 WC 1600 1600
Group 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)

谢谢

【问题讨论】:

【参考方案1】:

您可以使用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';

【讨论】:

感谢您重新排序问题中的表格格式。我相信你的意思是和 ig.type = 'G' 其中 i.type = 'L';但是输出是为子行的每一行重复组名,而不是为其子行重复特定的组名 感谢代码工作。我的数据有一个额外的分组层,这引起了我最初的困惑。再次感谢。

以上是关于提供来自 Main 组的子类型列表以及范围编号的主要内容,如果未能解决你的问题,请参考以下文章

'double'类型的数据的子范围

组合数少于 100

如何查看SAP不同类型凭证编号的范围

如何生成列表而忽略日期不符合我要查找的范围的记录?

SAS中字符数据的编号范围列表

交叉引用具有工作表编号的单元格