我一直在尝试创建当前表的视图,其中我使用原始表的两列创建日期。但我无法让它发挥作用..
在表格中,我有第14-52,1-13列,它们代表了财政年度的周数。 在表格中,最后一列是FiscalYear,在这种情况下,所有数据都设置为2017。
我想在视图中创建一个DATE列(通过使用特定周的星期一),该列基于年份(列)和会计年度(列)的周数
例如,我们有专栏#34;第14周和第34天;和专栏" 2017"我想回来" 20170403" (4月3日,2017年4月第一个星期一)。
所以在图片中: 目前我有这个:
我想创建这个:
非常感谢任何帮助!
答案 0 :(得分: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
我希望它会对你有所帮助。
答案 1 :(得分:0)
使用unpivot和几个tircks:
我不明白为什么1000变成1.000所以自己管理:
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 |
*------------------*-------------*-----------*----------*