我想計算組內的權重。假設我有一個像這樣的組表格,並且我想計算該組中所有產品值之和的產品價值的權重列。如何才能做到這一點?組內的Transact SQL計算
數據例如:
我想從該表中去:
此表:
這意味着權重列不存在。目標是創建一個包含所有原始列的新表格以及一個稱爲weight的新列。
重量計算示例:對於第5行B組產品x,重量計算爲重量= 10/40。
我想計算組內的權重。假設我有一個像這樣的組表格,並且我想計算該組中所有產品值之和的產品價值的權重列。如何才能做到這一點?組內的Transact SQL計算
數據例如:
我想從該表中去:
此表:
這意味着權重列不存在。目標是創建一個包含所有原始列的新表格以及一個稱爲weight的新列。
重量計算示例:對於第5行B組產品x,重量計算爲重量= 10/40。
您可以使用窗口功能來實現這一點。這裏是一個例子:
SELECT
1.0/(SUM([Value]) OVER (PARTITION BY [Group])) * [Value] AS [Weight]
FROM [YourTable]
我建議你在現有的表上(根據你的需要,當然)創建一個視圖。你可以這樣創建您的觀點:
CREATE VIEW [YourView] AS
SELECT
[Group],
Product,
[Value],
CASE
WHEN (SUM([Value]) OVER (PARTITION BY [Group])) = 0 THEN 0
ELSE 1.0/(SUM([Value]) OVER (PARTITION BY [Group])) * [Value] END AS [Weight]
FROM [YourTable]
SELECT [group], SUM(weight)
FROM table
GROUP BY [group]
在回答您的評論 - 當你查詢它,你可以創建一個視圖,將實時計算重量:
CREATE VIEW [dbo].[GroupWeights]
AS
SELECT [group], SUM(weight)
FROM table
GROUP BY [group]
回答你的問題,最近編輯:
CREATE VIEW ProductWeights
AS
SELECT [p.group], product, value, (value/(SELECT SUM(value) FROM Products WHERE [group] = [p.group] GROUP BY [group])) AS [weight]
FROM Products AS p
重列不存在。目標是創建權重列,即一個新的表格,將包含以前的列加上權重列 – user7066213
@ user7066213請參閱我的編輯 – opewix
請參閱我的編輯此答案不計算權重 – user7066213
您可以使用SELECT INTO與分區上創建新表和SUM通過組獲得總和如下:
Select [Group], Product, [Value],
[Weight] = ([Value]*1.0)/SUM([Value]) over(Partition by [Group])
INTO NewTable from YourTable
如果某些羣組的總和(值)等於零,那該怎麼辦?我們如何防範這一點?例如在計算中過濾它們? – user7066213
您可以使用CASE WHEN語句在執行除法之前檢查組合和是否爲0。我已經更新了我的答案中的CREATE VIEW語句以提供一個示例。當組的總和爲0時,我選擇將[Weight]作爲0返回,但您可以根據需要更改此值。 – dybzon