私はデータをグループ化する必要があるSQL Serverデータベースに要件があります。参照用に付属の画像を見つけてください。レベルに基づくグループ番号
レベルが2より大きい場合、レベル2(例:1.1.1、1.1.2は1.1より下にロールアップされます)でグループ化されなければなりません。レベル2がない場合は、レベル3の数字(例:1.2.1)に基づいて第2のレベルを作成するには、計算列として新しい値を必要とする場合
おかげ
私はデータをグループ化する必要があるSQL Serverデータベースに要件があります。参照用に付属の画像を見つけてください。レベルに基づくグループ番号
レベルが2より大きい場合、レベル2(例:1.1.1、1.1.2は1.1より下にロールアップされます)でグループ化されなければなりません。レベル2がない場合は、レベル3の数字(例:1.2.1)に基づいて第2のレベルを作成するには、計算列として新しい値を必要とする場合
おかげ
それは最初の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;
これ、どうなりますか?
を更新:これは二桁で動作し、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
)
LEFT関数で使用される数値を動的に取得する方法はありますか? –
左の部分はややこしいですが、実際には同じ種類のロジックを小数値にも実装する必要があります(バージョン番号が9を超える場合)。 LEN(バージョン) - REPLACE(バージョン、 '。'、 '')> = 3のサブロジックは、ケースロジックを使用すると簡単です。 – JayValkyr
のためにあなたが見つけるために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
スクリーンショットごとに追加の列を追加したい場合は、データをグループ化して集計するか、出力時にデータを並べ替えるだけですか? – iamdave
レベル2以上のグループ番号の末尾には常に「。」がありますか? 1.2.1には1つが含まれていないためです。 – Nebi
データをテキストとして貼り付けてください。 – TheGameiswar