【发布时间】:2016-12-28 11:23:53
【问题描述】:
由于我的问题很长,所以让我们快速进入:
CREATE TABLE [dbo].[FinDayInfo] --Table to get Financial Year , Month and Week information against a date
(
[CalDate] [date],
[WeekNo] [numeric] (18, 0),
[FinYear] [numeric] (18, 0),
[FinMM] [int]
)
INSERT INTO [dbo].[FinDayInfo] ( [CalDate] ,[WeekNo] ,[FinYear] ,[FinMM] )
VALUES ('2016-06-27' , 1 , 2017 , 1)
INSERT INTO [dbo].[FinDayInfo] ( [CalDate] ,[WeekNo] ,[FinYear] ,[FinMM] )
VALUES ('2016-08-03' , 6 , 2017 , 2)
INSERT INTO [dbo].[FinDayInfo] ( [CalDate] ,[WeekNo] ,[FinYear] ,[FinMM] )
VALUES ('2016-08-08' , 7 , 2017 , 2)
INSERT INTO [dbo].[FinDayInfo] ( [CalDate] ,[WeekNo] ,[FinYear] ,[FinMM] )
VALUES ('2016-08-15' , 8 , 2017 , 2)
CREATE TABLE [dbo].[Act] --Accounts table having Financial Week and Shop-wise data
(
[FinYear] [int],
[FinMonth] [int],
[FinWeek] [int],
[ShopCode] [int],
[ActVal] [decimal] (18, 6)
)
INSERT INTO [dbo].[ACT] ( [FinYear] ,[FinMonth] ,[FinWeek] ,[ShopCode] ,[ActVal] )
VALUES ( 2017, 1 , 2 , 1234 , 10)
INSERT INTO [dbo].[ACT] ( [FinYear] ,[FinMonth] ,[FinWeek] ,[ShopCode] ,[ActVal] )
VALUES ( 2017 , 1 , 3 , 1234 , 50)
INSERT INTO [dbo].[ACT] ( [FinYear] ,[FinMonth] ,[FinWeek] ,[ShopCode] ,[ActVal] )
VALUES ( 2017 , 1 , 4 , 1234 , 40)
INSERT INTO [dbo].[ACT] ( [FinYear] ,[FinMonth] ,[FinWeek] ,[ShopCode] ,[ActVal] )
VALUES ( 2017 , 1 , 5 , 1234 , 20)
INSERT INTO [dbo].[ACT] ( [FinYear] ,[FinMonth] ,[FinWeek] ,[ShopCode] ,[ActVal] )
VALUES ( 2017 , 2 , 6 , 1234 , 100)
INSERT INTO [dbo].[ACT] ( [FinYear] ,[FinMonth] ,[FinWeek] ,[ShopCode] ,[ActVal] )
VALUES ( 2017 , 2 , 7 , 5678 , 90)
INSERT INTO [dbo].[ACT] ( [FinYear] ,[FinMonth] ,[FinWeek] ,[ShopCode] ,[ActVal] )
VALUES ( 2017 , 2 , 8 , 1290 , 100)
CREATE TABLE [dbo].[Sal] --Sales data table
(
[SalDate] [Date],
[ShopCode] [int],
[ItemCode] [nvarchar](10),
[SaleVal] [decimal] (18,6)
)
INSERT INTO [dbo].[Sal] ( [SalDate] , [ShopCode] , [ItemCode] , [SaleVal] )
VALUES ( '2016-06-27', 1234, '111PN' , 5 )
INSERT INTO [dbo].[Sal] ( [SalDate] , [ShopCode] , [ItemCode] , [SaleVal] )
VALUES ( '2016-08-03', 1234, '100AB' , 50 )
INSERT INTO [dbo].[Sal] ( [SalDate] , [ShopCode] , [ItemCode] , [SaleVal] )
VALUES ( '2016-08-03', 1234, '100BC' , 60 )
INSERT INTO [dbo].[Sal] ( [SalDate] , [ShopCode] , [ItemCode] , [SaleVal] )
VALUES ( '2016-08-03', 1234, '110JK' , 40 )
INSERT INTO [dbo].[Sal] ( [SalDate] , [ShopCode] , [ItemCode] , [SaleVal] )
VALUES ( '2016-08-08', 5678, '122AB' , 90 )
INSERT INTO [dbo].[Sal] ( [SalDate] , [ShopCode] , [ItemCode] , [SaleVal] )
VALUES ( '2016-08-15', 1290, '111PN' , 35 )
INSERT INTO [dbo].[Sal] ( [SalDate] , [ShopCode] , [ItemCode] , [SaleVal] )
VALUES ( '2016-08-15', 1290, '123CD' , 35 )
根据这些数据,我需要如下结果(或来自附加图像)。
此数据的目的是每周获取调整值项目和商店。此调整根据其对销售的贡献分配给每个项目。 “ActVal”是这方面的标准值,我们根据“ActVal”和“TotalSalePerShopAndWeek”的差值计算调整值。这样,如果我们将“TotalSalePerShopAndWeek”和“AdjustmentVal”相加,它应该等于“ActValPerShopAndWeek”。
因此,为了关联这两个数据集,我尝试了 CTE、完全连接,但我无法正确连接。
你能帮我得到以下结果吗?
(我无法在此处正确格式化结果,因此我为此附上了图片)。
FinYear FinMonth FinWeek ShopCode ItemCode SaleValPerWeekAndItem TotalSalePerShopAndWeek AdjustmentPercentage=(SaleValPerWeekAndItem / TotalSalePerShopAndWeek) ActValPerShopAndWeek AdjustmentValPerWeekAndItem= ((ActValPerShopAndWeek - TotalSalePerShopAndWeek) * AdjustmentPercentage)#[enter image description here][2]
2017 1 1 1234 111PN 5 5 1 0 -5
2017 1 2 1234 111PN 0 0 0 10 10
2017 1 3 1234 111PN 0 0 0 50 50
2017 1 4 1234 111PN 0 0 0 40 40
2017 1 5 1234 111PN 0 0 0 20 20
2017 2 6 1234 100AB 50 150 0.333333 100 -16.66665
2017 2 6 1234 100BC 60 150 0.4 100 -20
2017 2 6 1234 110JK 40 150 0.266666 100 -13.133333
2017 2 7 5678 122AB 90 90 1 90 90
2017 2 8 1290 111PN 35 70 0.50 90 15
2017 2 8 1290 123CD 35 70 0.50
90 15
【问题讨论】:
-
感谢 Ranjana 的更正,但也在寻找解决方案 :)
-
你能用英语定义关系吗?我猜 FinDayInfo 与年和周的 Act 有关,而 Act 与 ShopCode 的 Sal 有关。那是对的吗?那是完整的吗? (对我来说似乎不完整。)
-
为什么第一周没有出现在 Act 表中?
-
另外,您需要指定这些表如何相互关联。
标签: sql-server tsql sql-server-2012