2017-05-25 12 views
0

Report_Idとタイムラインの列を持つレポートの前月を含むテーブル名Prv_Dataが1つあります。今月の前月データの管理

Prv_Data - >
Report_ID | Timeline ---------------|-------------- 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru

私は、現在の月の詳細が含まれてCur_Monthとして、別のテーブル名を持っています。

Cur_Month - > Details | Count --------------|-------- First Date | 05/01/2017 Last Date | 05/31/2017 Friday | 4 Monday | 5 Saturday | 4 Sunday | 4 Thursday | 4 Tuesday | 5 Wednesday | 5

今、私はレポートの詳細が含まれていますが、現在の月の平日の数に応じてCur_Dataとしてテーブル名を作りたい
は、月曜日の前月数が4とカウントした手段木曜日は5日だったので、月曜日のReport_ID1と2の発生が4回発生し、木曜日に5回発生しました。現在、現在月曜日と木曜日の発生は5と4です(今月の情報はCur_Monthテーブルからのものです)。 prv_monthテーブルのデータを複製したいが、月曜日と木曜日の発生に応じて--- Cur_Data

Cur_Data(理想の表) - 事前に>
Report_ID | Timeline ---------------|-------------- 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 01 | Weekly @Mon 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru 02 | Weekly @Thru

感謝:)

+0

あなたは、サンプルの入力データと適切な予想される出力を提供することができますか? –

+0

Prv_Dataは入力データ、Cur_Dataは出力が期待されます – Jayank

+1

は悪いデザインのように聞こえます...なぜそのように詳しく説明できますか?そして、私は/これらがビュー...テーブルではないと思います。 – scsimon

答えて

0

私にとっても、あなたが非常によく、あなたの要件をカバーしていないように見えます。

私は事に従っていません。

私が理解しているのは、Cur_Monthデータを特定のフォーマットのCur_Data Beaseに変換したいということだけです。背景を理解していません。

はこれを試してみて、私に知らせて、

declare @Prv_Data table(Report_ID int,Timeline varchar(40)) 
insert into @Prv_Data VALUES 
(01,'Weekly @Mon') 
,(01,'Weekly @Mon') 
,(01,'Weekly @Mon') 
,(01,'Weekly @Mon') 
,(02,'Weekly @Thru') 
,(02,'Weekly @Thru') 
,(02,'Weekly @Thru') 
,(02,'Weekly @Thru') 
,(02,'Weekly @Thru') 


declare @Cur_Month table(Details varchar(40),Count varchar(40)) 
insert into @Cur_Month VALUES 
('First Date','05/01/2017') 
,('Last Date','05/31/2017') 
,('Friday','4') 
,('Monday','5') 
,('Saturday','4') 
,('Sunday','4') 
,('Thursday','4') 
,('Tuesday','5') 
,('Wednesday','5') 
;WITH Cur_Data as 
(
select * 
,case when Details='Monday' then '1' 
when Details='Thursday' then '2' END ReportID 
,case when Details='Monday' then 'Weekly @Mon' 
when Details='Thursday' then 'Weekly @Thru' END Timeline 
    from @Cur_Month 
where Details in('Monday','Thursday') 
) 

select REPLICATE('0',len(ReportID))+ ReportID ReportID 
,Timeline from Cur_Data c 
cross apply (select number 
from master..spt_values where number>0 
and number<=c.[count] and type='LO')cs 
+0

コードに厳しいおかげで、望ましい出力が得られます。しかし、あなたは "master..spt_values"の使い方を説明することができますか、ここでは正確に何をしていますか?私は "master..spt_values"を学び、そのことを知るようになりました。それは、文書化されていないシステムテーブルであり、いつでもMicrosoftができるので、安全ではありません。だから、我々はそれのための任意の選択肢があります。再度、感謝します! – Jayank

関連する問題