【发布时间】:2019-12-31 11:33:15
【问题描述】:
我正在尝试将 RAW 数据的表结构从宽表更改为窄表。
所以我设法使它适用于一组列。当我尝试制作更多列时,问题就开始了。
我试过只使用 UNPIVOT,但这似乎不起作用。
所以我为每组数据有 10 列(每列代表该值的一年),我想把它变成一列。
例如从 [YREnd1]、[YREnd2]、[YREnd3] 等到 [YREnd]。但是,当我尝试添加时,我已经为一组进行了管理。 [有形] 它只是重复第一年的值,而不是使用下一个值。
我怀疑我只是错过了一个连接,以匹配有形的年末和上半年的年末,但我不知道该怎么做。
这行得通:
SELECT [PandL1].[RegNum],
c.[YrEnd]
FROM [Raw_UK].[dbo].[PandL1]
JOIN [Raw_UK].[dbo].[PandL2] on [PandL1].[RegNum]=[PandL2].[RegNum]
JOIN [Raw_UK].[dbo].Balance1 on Balance1.[RegNum] = [PandL1].[RegNum]
JOIN [Raw_UK].[dbo].Balance2 on Balance2.[RegNum] = [PandL1].[RegNum]
JOIN [Raw_UK].[dbo].Balance3 on Balance3.[RegNum] = [PandL1].[RegNum]
Cross apply
(
Values
('[Accounts date Last avail yr]', [Accounts date Last avail yr]),
('[Accounts date Year - 1]', [Accounts date Year - 1]),
('[Accounts date Year - 2]', [Accounts date Year - 2]),
('[Accounts date Year - 3]', [Accounts date Year - 3]),
('[Accounts date Year - 4]', [Accounts date Year - 4]),
('[Accounts date Year - 5]', [Accounts date Year - 5]),
('[Accounts date Year - 6]', [Accounts date Year - 6]),
('[Accounts date Year - 7]', [Accounts date Year - 7]),
('[Accounts date Year - 8]', [Accounts date Year - 8]),
('[Accounts date Year - 9]', [Accounts date Year - 9])
) c ([RegNum],[YrEnd])
GROUP BY [PandL1].[RegNum],
c.[YrEnd];
这不起作用:
SELECT [PandL1].[RegNum],
c.[YrEnd],
t.[Tangibles]
FROM [Raw_UK].[dbo].[PandL1]
JOIN [Raw_UK].[dbo].[PandL2] on [PandL1].[RegNum] = [PandL2]
.[RegNum]
JOIN [Raw_UK].[dbo].Balance1 on Balance1.[RegNum] = [PandL1].[RegNum]
JOIN [Raw_UK].[dbo].Balance2 on Balance2.[RegNum] = [PandL1].[RegNum]
JOIN [Raw_UK].[dbo].Balance3 on Balance3.[RegNum] = [PandL1].[RegNum]
Cross apply
(
Values
('[Accounts date Last avail yr]', [Accounts date Last avail yr]),
('[Accounts date Year - 1]', [Accounts date Year - 1]),
('[Accounts date Year - 2]', [Accounts date Year - 2]),
('[Accounts date Year - 3]', [Accounts date Year - 3]),
('[Accounts date Year - 4]', [Accounts date Year - 4]),
('[Accounts date Year - 5]', [Accounts date Year - 5]),
('[Accounts date Year - 6]', [Accounts date Year - 6]),
('[Accounts date Year - 7]', [Accounts date Year - 7]),
('[Accounts date Year - 8]', [Accounts date Year - 8]),
('[Accounts date Year - 9]', [Accounts date Year - 9])
) c ([RegNum],[YrEnd])
Cross apply
(
Values
('[Tangible Assets th GBP Last avail yr]', [Tangible Assets th GBP
Last avail yr]),
('[Tangible Assets th GBP Year - 1]',[Tangible Assets th GBP Year - 1]),
('[Tangible Assets th GBP Year - 2]',[Tangible Assets th GBP Year - 2]),
('[Tangible Assets th GBP Year - 3]',[Tangible Assets th GBP Year - 3]),
('[Tangible Assets th GBP Year - 4]',[Tangible Assets th GBP Year - 4]),
('[Tangible Assets th GBP Year - 5]',[Tangible Assets th GBP Year - 5]),
('[Tangible Assets th GBP Year - 6]',[Tangible Assets th GBP Year - 6]),
('[Tangible Assets th GBP Year - 7]',[Tangible Assets th GBP Year - 7]),
('[Tangible Assets th GBP Year - 8]',[Tangible Assets th GBP Year - 8]),
('[Tangible Assets th GBP Year - 9]',[Tangible Assets th GBP Year - 9])
)
t ([RegNum], [Tangibles])
GROUP BY [PandL1].[RegNum],
c.[YrEnd],
t.[Tangibles];
结果应该是:
GB********, 31/12/2018, 3575
GB********, 31/12/2017, 3187
GB********, 31/12/2016, 3084
GB********, 31/12/2015, 2813
GB********, 31/12/2014, 2758
GB********, 31/12/2013, 2621
GB********, 31/12/2012, 2304
GB********, 31/12/2011, 2298
GB********, 31/12/2010, 2045
GB********, 31/12/2009, 1967
我得到的是:
GB********, 31/12/2018, 3575
GB********, 31/12/2017, 3575
GB********, 31/12/2016, 3575
GB********, 31/12/2015, 3575
GB********, 31/12/2014, 3575
GB********, 31/12/2013, 3575
GB********, 31/12/2012, 3575
GB********, 31/12/2011, 3575
GB********, 31/12/2010, 3575
GB********, 31/12/2009, 3575
【问题讨论】:
标签: sql-server tsql unpivot