2016-09-19 12 views
-2

私はデータをグループ化する必要があるSQL Serverデータベースに要件があります。参照用に付属の画像を見つけてください。レベルに基づくグループ番号

レベルが2より大きい場合、レベル2(例:1.1.1、1.1.2は1.1より下にロールアップされます)でグループ化されなければなりません。レベル2がない場合は、レベル3の数字(例:1.2.1)に基づいて第2のレベルを作成するには、計算列として新しい値を必要とする場合

おかげ

+0

スクリーンショットごとに追加の列を追加したい場合は、データをグループ化して集計するか、出力時にデータを並べ替えるだけですか? – iamdave

+0

レベル2以上のグループ番号の末尾には常に「。」がありますか? 1.2.1には1つが含まれていないためです。 – Nebi

+0

データをテキストとして貼り付けてください。 – TheGameiswar

答えて

0

それは最初の2つの数字は一桁であることを特定のない場合:それは最初の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; 

は:

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

これ、どうなりますか?
を更新:これは二桁で動作し、3列目には、第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

左の部分はややこしいですが、実際には同じ種類のロジックを小数値にも実装する必要があります(バージョン番号が9を超える場合)。 LEN(バージョン) - REPLACE(バージョン、 '。'、 '')> = 3のサブロジックは、ケースロジックを使用すると簡単です。 – JayValkyr

0

のためにあなたが見つけるためにCHARINDEXを使用することができますnullです「」 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 
関連する問題