1

ある友人は、彼の新しい雇用主は、1) リテラルの「日付:」、2) オプションの区切り文字、3) DD-MM-YY 形式の日付 (先頭のゼロはオプションです) 4) 区切りスペース 5) 日付に関連付けられたデータの単一の「WORD」。この単語には埋め込みスペースはありません。

この基準を満たすデータをサンプル テーブルに入力して、明確にするための例を示します。

CREATE TABLE [dbo].[Sample](
    [RowNumber] [int] NOT NULL,
    [DataMess] [varchar](max) NOT NULL
) ON [PRIMARY]


INSERT [dbo].[Sample] ([RowNumber], [DataMess]) VALUES (1, N'Date:12-21-13 12/13/14/15 Date:4-2-11 39/12/134/14 Date:4-1-13 19/45/5/12')
INSERT [dbo].[Sample] ([RowNumber], [DataMess]) VALUES (2, N'Date:7-21-13 12/13/14/15 Date:8-21-12 39/12/34/14 Date:12-1-13 19/4/65/12')
INSERT [dbo].[Sample] ([RowNumber], [DataMess]) VALUES (3, N'Date:3-21-13 12/11233/14/15 Date:4-28-13 39/12/34/14 Date:9-19-13 19/45/65/12')

最初のレコードでは、「12/13/14/15」は、日付 12-21-13 に関連付けられたデータの「単語」であると見なされます。

彼は、SSRS で次のレポートを作成するよう依頼されました。

Row Number               DataMess
1                        Date: 12-21-13 12/13/14/15 
                         Date: 4-1-13 19/45/5/12 
                         Date: 4-2-11 39/12/134/14 

2                        Date:12-1-13 19/4/65/12 
                         Date:7-21-13 12/13/14/15 
                         Date:8-21-12 39/12/34/14 

3                        Date:9-19-13 19/45/65/12 
                         Date:4-28-13 39/12/34/14 
                         Date:3-21-13 12/11233/14/15  

各ソース行番号の日付は、関連付けられたデータに合わせて降順でソートされることに注意してください。

私は SSRS を知りませんが、私の反応は、そのタスクを試みるのではなく、T-SQL を使用してその醜い文字列解析をデータが実際にすべて実行しようとするべきではないことを雇用主に伝えることを彼に勧めることでした。代わりに、この繰り返しの「Date: DATA」は、親行レコードに関連付けられている個々の子レコードに格納する必要があります。コードは醜く、非効率的で、もろく、保守が難しいと思います。あなたの考えは何ですか?

管理\クライアントが常に正しいと仮定するか、「理想的には」これが正しいと認めますが、「今のところ」次のレポートを生成する SQL が必要です。これは迅速に作成できることが期待されていました (たとえば、半日)。

4

2 に答える 2

1

あなたはもちろん正しいです。データを保存する最良の方法からはほど遠いことは確かです。このレポートのデータを抽出する方法は、保存方法が異なる場合よりもはるかに複雑になります。

ただし、データに基づいて、実際にレポートを作成することはそれほど難しくありません。テーブル構造のため、レポート用のデータセットを実際に生成するのは最も難しい部分です。

したがって、データセットを生成するには、データを分割してDate/WordDataMessごとに 1 つの行を取得し、その分割データから日付を抽出して、必要に応じて日付で並べ替えることができるようにする必要があります。

データを分割する方法を選択してください。

T-SQLで同等の関数を分割しますか? このリンク - Best Split Functionと同様に、多くのオプションがあります。

関数の 1 つが動作しているSQL Fiddleを次に示します。

データを分割したら、適切な関数を使用して日付部分 (データの前のコロンとスペースの間) を抽出し、これを日付として抽出しCASTます。

実際にデータセットを取得したら、それは最も簡単なレポートです。RowNumber に基づいて行グループを追加し、分割された日付/単語データを詳細フィールドとして追加するだけで完了です。実際にはレポートに表示しない場合でも、抽出された日付フィールドによってデータセットが並べ替えられていることを確認してください。

暫定的な措置として、私はこれが半日程度の作業で実行可能であることを確かに期待しています. したがって、このレポートだけではそれほど悪くはありませんが、それ以外の場合は問題が発生する可能性があります。

数行の場合は問題なく動作する可能性がありますが、自明でないサイズのデータ​​セットではパフォーマンスが最適ではありません。

于 2013-04-27T20:24:18.210 に答える