我在SQL Server數據庫中有必須對數據進行分組的要求。請查看附件以供參考。基於級別的組號碼
如果等級超過2,則必須將其歸入等級2(例如:1.1.1,1.1.2在1.1之下彙總),如果沒有可用的等級2,則必須創建基於級別3個數字(例如:1.2.1)第二級
感謝
我在SQL Server數據庫中有必須對數據進行分組的要求。請查看附件以供參考。基於級別的組號碼
如果等級超過2,則必須將其歸入等級2(例如:1.1.1,1.1.2在1.1之下彙總),如果沒有可用的等級2,則必須創建基於級別3個數字(例如:1.2.1)第二級
感謝
如果不是肯定的是,前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;
這會做,如果你需要的新值計算列?
更新:這個作品以兩位數和第三欄爲空第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
)
我們是否有一種動態的方式來獲取在LEFT函數中使用的數字。 –
左邊部分有點棘手,但實際上你必須在subvalue中實現同樣的邏輯(當版本號超過9時)。子部分很容易用例邏輯WHEN LEN(Version) - REPLACE(Version,'。','')> = 3 – JayValkyr
可以使用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
您是否想要根據截圖添加額外的列,是否要對數據進行分組並對其進行聚合,或者您是否只需要在輸出時訂購數據? – iamdave
在2級或更高級別的組號後面是否總是有一個'.'?因爲1.2.1沒有一個。 – Nebi
請將數據粘貼爲文本 – TheGameiswar