0
区切り文字を使用して列の値を1つに分割する必要があります。SQL Serverを使用して区切り文字で列を分割する
create table #a
(
id int,
timeline varchar(100)
)
insert into #a
values (1, 'Semi Annual Q2 (May/June/July) & Q4 (Nov/Dec/Jan)'),
(2, 'Semi Annual Q1 (Feb/Mar/Apr) & Q3 (Aug/Sep/Oct)'),
(3, 'Annual Q3 (Aug/Sep/Oct)'),
(4, 'Annual Q2 (May/June/July)'),
(5, 'Annual Q4 (Nov/Dec/Jan)'),
(6, 'Semi Annual Q1 (Jan/Feb/Mar) & Q3 (July/Aug/Sep)')
select * from #a
私は「/」区切り文字でタイムラインの値を分割して別々の月とすべての月の別の列を作りたいの出力は、以下のサンプルのように見えた、順番にする必要があります。
ID M1 M2 M3 M4 M5 M6
---------------------------------------
1 May June July Nov Dec Jan
2 Feb Mar Apr Aug Sep Oct
3 Aug Sep Oct NULL NULL NULL
4 May June July NULL NULL NULL
5 Nov Dec Jan NULL NULL NULL
6 Jan Feb Mar July Aug Sep
はこれまでのところ、私はこれを試してみました:
コードではなく、あまりにも退屈select
timeline,
substring((substring(timeline, CHARINDEX('(', timeline) + 1, len(timeline) - 1)), 1, charindex('/', substring(timeline, CHARINDEX('(', timeline) + 1, len(timeline) - 1)) - 1) as M1,
replace(replace(right(substring(substring(timeline, CHARINDEX('(', timeline) + 1, len(timeline)), 1, charindex(')', substring(timeline, CHARINDEX('(', timeline) + 1, len(timeline)))), charindex('/', reverse(substring(substring(timeline, CHARINDEX('(', timeline) + 1, len(timeline)), 1, charindex(')', substring(timeline, CHARINDEX('(', timeline) + 1, len(timeline))))), 4)), '/', ''), ')', '') as M3
from
#a;
。あなたがこれを行う効率的な方法を持っているなら、助けてください。ここで
は、溶液中でそれを使用する方法です
Jeff ModenのDelimitedSplit8K関数は、このトリックを行う必要があります。ここで見つけることができます。http://www.sqlservercentral.com/articles/Tally+Table/72993/ –
I al Jeffのスプリッタをお勧めします。しかしそれ以上には、区切られたデータを格納する方法を終了することをお勧めします。それは1NFに違反し、苦痛をたくさん引き起こします。 –
[列にコンマ区切り値を分割する方法](https://stackoverflow.com/questions/10581772/how-to-split-a-comma-separated-value-to-columns) –