2
由於我的問題是一個漫長的,所以讓我們快速跳進去:如何使用T-SQL關聯兩組不同的數據集?
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)
從這個數據,我需要(或附圖片)效果如下。
此數據的目的是在每週獲得調整值項目和Shop-wise。該調整根據其銷售貢獻分配給每個項目。 「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爲更正,但尋找解決方案以及:) – Kamran
你能定義英文關係嗎?我猜FinDayInfo涉及按年和周的行爲,並且該法與ShopCode的Sal有關。那是對的嗎?完成了嗎? (對我來說這似乎不完整) – DeadZone
爲什麼第1周沒有出現在法案表中? –