2017-06-14 5 views
1

元の表の2つの列を使用して日付を作成する現在の表のビューを作成しようとしています。しかし、私はそれを働かせることはできません。既存の2つの列のデータを使用してDATE(第1曜日)列を作成します。

私は、表14-52、1-13、FiscalYearの週を表しています。 テーブルの最後の列はFiscalYearで、この場合はすべてのデータに対して2017に設定されています。

私は年の週番号(列)と会計年度(列)

に基づいてビューで(特定の週の月曜日を使用して)DATE列を作成したい

たとえば、列「週14」と列「2017」があり、「20170403」(4月3日、2017年4月の最初の月曜日)に戻りたいとします。写真中のSO

:すべてのヘルプははるかに高く評価されるだろう

2

:私はこれを作成したい

1

: は現在、私はこれを持っています!

+0

特定のデータベースエンジン(SQL-Server、PostgreSQL、MySQL)? –

答えて

0

使用アンピボットと少数tircks:出力がある

select a.EmployeeNumber, 
     DATEADD(DAY, DATEPART(WEEKDAY,(DATEADD(WEEK,a.weeks-1,(select cast('01/01/'+ CAST(a.FiscalYear as nvarchar(4)) as date))))) , 
     CAST((DATEADD(WEEK,a.weeks-1,(select cast('01/01/'+ CAST(a.FiscalYear as nvarchar(4)) as date)))) AS DATE)) [Date],a.FiscalYear,a.budget 
     from emp e 
unpivot 
(
budget 
for weeks in ([14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25]) 
) a 

*------------------*-------------*-----------*----------* 
|EmployeeNumber |Date   |FiscalYear | budget | 
*------------------*-------------*-----------*----------* 
|1234    |2017-04-03 |2017  | 1000  | 
*------------------*-------------*-----------*----------* 
|1234    |2017-04-10 |2017  | 2000  | 
*------------------*-------------*-----------*----------* 
|1234    |2017-04-17 |2017  | 3000  | 
*------------------*-------------*-----------*----------* 
|1234    |2017-04-24 |2017  | 4000  | 
*------------------*-------------*-----------*----------* 
|1234    |2017-05-01 |2017  | 5000  | 
*------------------*-------------*-----------*----------* 
|1234    |2017-05-08 |2017  | 6000  | 
*------------------*-------------*-----------*----------* 
|1234    |2017-05-15 |2017  | 7000  | 
*------------------*-------------*-----------*----------* 
|1234    |2017-05-22 |2017  | 8000  | 
*------------------*-------------*-----------*----------* 
|1234    |2017-05-29 |2017  | 9000  | 
*------------------*-------------*-----------*----------* 
|1234    |2017-06-05 |2017  | 10000 | 
*------------------*-------------*-----------*----------* 
|1234    |2017-06-12 |2017  | 11000 | 
*------------------*-------------*-----------*----------* 
|1234    |2017-06-19 |2017  | 12000 | 
*------------------*-------------*-----------*----------* 
+0

ありがとう、ほとんど私が今の後になっている。第1四半期(カラム[1] - [13])は2018年の通常の暦年であるため、それを設定することは可能ですか?エントリーの日付は、1月1月、2月、3月の2018年になります。 – RLT

+0

はいできます。 unpivoy部分に列を追加するだけです。その他の変更は必要ありません。 @ RLT –

1
CREATE TABLE SampleTable (EmployeeNumber int, 
[1] int, [2] int, [3] int, [4] int, 
[5] int, [6] int, [7] int, [8] int, 
[9] int, [10] int, [11] int, [12] int, [13] int, 
[14] int, [15] int, [16] int, [17] int, 
[18] int, [19] int, [20] int, [21] int, 
[22] int, [23] int, [24] int, [25] int, FiscalYear int); 
GO 
INSERT INTO SampleTable VALUES (1, 
1,2,3,4, 
5,6,7,8, 
9,10,11,12,13, 
1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000, 2017); 
GO 
SET DATEFIRST 1 

SELECT EmployeeNumber 
,CONVERT(VARCHAR(8) 
,dateadd (week, CONVERT(int, [Date]) 
,dateadd (year, CASE WHEN CONVERT(int, [Date]) < 14 THEN FiscalYear + 1 ELSE FiscalYear END - 1900 , 0)) - 4 - datepart(dw, dateadd (week, CONVERT(int,[Date]) 
,dateadd (year, CASE WHEN CONVERT(int, [Date]) < 14 THEN FiscalYear + 1 ELSE FiscalYear END - 1900 , 0)) - 4) + 1, 112) AS [DATE] 
,FiscalYear 
,Budget 
FROM 
(
    SELECT EmployeeNumber, [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], FiscalYear FROM SampleTable 
) p 
UNPIVOT 
(
Budget FOR [Date] IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25]) 
) 
AS unpvt 

私は願っています

1000がいることを自分で管理するので、1.000になった理由は、私が得るdidntはそれがあなたを助けるだろう。

+0

ありがとう、ほとんど私は今の後になっている。第1四半期(カラム[1] - [13])は2018年の通常の暦年であるため、それを設定することは可能ですか?エントリの日付は2018年1月、2月、2月、12月になります – RLT

+0

@@ RLT 2018年暦年のために編集しました。 –