2016-09-19 67 views
-2

我在SQL Server數據庫中有必須對數據進行分組的要求。請查看附件以供參考。基於級別的組號碼

如果等級超過2,則必須將其歸入等級2(例如:1.1.1,1.1.2在1.1之下彙總),如果沒有可用的等級2,則必須創建基於級別3個數字(例如:1.2.1)第二級

感謝

+0

您是否想要根據截圖添加額外的列,是否要對數據進行分組並對其進行聚合,或者您是否只需要在輸出時訂購數據? – iamdave

+0

在2級或更高級別的組號後面是否總是有一個'.'?因爲1.2.1沒有一個。 – Nebi

+0

請將數據粘貼爲文本 – TheGameiswar

回答

0

如果不是肯定的是,前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; 
0

這會做,如果你需要的新值計算列?
更新:這個作品以兩位數和第三欄爲空第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 
) 
+0

我們是否有一種動態的方式來獲取在LEFT函數中使用的數字。 –

+0

左邊部分有點棘手,但實際上你必須在subvalue中實現同樣的邏輯(當版本號超過9時)。子部分很容易用例邏輯WHEN LEN(Version) - REPLACE(Version,'。','')> = 3 – JayValkyr

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