基于级别的组号

时间:2016-09-19 09:47:58

标签: sql sql-server tsql

我在SQL Server数据库中要求我必须对数据进行分组。请查看附件中的图片以供参考。

如果等级大于2,则必须将其分组在等级2下(例如:1.1.1,1.1.2在1.1下滚动。)如果没有任何等级2,则必须创建基于3级数字的第二级(例如:1.2.1)

由于

3 个答案:

答案 0 :(得分:0)

如果您需要将新值作为计算列,是否会这样做?
更新:这适用于两位数,第三/第二级版本的第三列为空

CREATE TABLE Test
(
    Version varchar(30),
    VersionMain AS CASE
        WHEN CHARINDEX('.',Version,4) > 0 THEN LEFT(Version,CHARINDEX('.',Version,4)) ELSE Version END,
    VersionSub AS CASE
        WHEN LEN(Version) - LEN(REPLACE(Version,'.','')) >= 3 THEN Version ELSE NULL END
)

答案 1 :(得分:0)

您可以使用CHARINDEX找到'。'然后决定DERIVED_COL_2。

SELECT COLUMN, 
SUBSTRING(COLUMN,1,4)DERIVED_COL_1,
CASE WHEN CHARINDEX('.',COLUMN,5) = 6 THEN COLUMN END AS DERIVED_COL_2
FROM YOUR_TABLE

答案 2 :(得分:0)

如果不确定前两个数字是否为单个数字:

declare @T table ([Column] varchar(20));

insert into @T values ('1'),('1.2.'),('1.2.3.'),('1.2.3.4.'),('10.20.'),('10.20.30.'),('10.20.30.40.');

select 
case when [Column] like '%.%.%' then substring([Column],1,charindex('.',[Column],charindex('.',[Column])+1)) else [Column] end as [Derived Col1], 
case when [Column] like '%.%.%.%' then [Column] else '' end as [Derived Col2]
from @T;

如果确定前两个数字是单个数字,则可以简化:

declare @T table ([Column] varchar(20));

insert into @T values ('1'),('1.2.'),('1.2.3.'),('1.2.3.4.');

select 
substring([Column],1,4) as [Derived Col1], 
case when [Column] like '%.%.%.%' then [Column] else '' end as [Derived Col2]
from @T;