簡體   English   中英

基於級別的組號

[英]Group Numbers based on Level

我對 SQL Server 數據庫有要求,我必須在其中對數據進行分組。 請找到所附圖片以供參考。

如果級別大於 2,則必須將其分組在級別 2 下(例如:1.1.1、1.1.2 匯總在 1.1 下。),如果沒有任何級別 2 可用,則必須創建第二個級別基於第 3 級數字(例如:1.2.1)

謝謝

如果您需要將新值作為計算列,這樣做可以嗎?
更新:這適用於兩位數,第 1/2 級版本的第三列為空

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
)

您可以使用 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 個數字是個位數:

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;

如果確定前 2 個數字是個位數,則可以簡化:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM