2010-09-15 92 views
3

我敢肯定這是一個愚蠢的n00b問題,但我有以下結果表(它是通過冗長的查詢創建的,我只有一半的理解)什麼我想是能夠在相對於總的行百分比摸出兩列加:百分比排佔總數的比例,其中每一行由分組決定

樣品結果表:

CREATE TABLE #temp 
(category varchar(30) 
,count_people INT 
,numpayments05 INT 
,avegifts05 DECIMAL(4,2) 
,value05 DECIMAL(18,2) 
,donorvalue05 DECIMAL(18,2) 
,giftvalue05 DECIMAL(18,2) 
) 
INSERT INTO #temp VALUES ('Single Gifts',124945,182458.00,1.46,28787034.10,230.40,157.77) 
INSERT INTO #temp VALUES ('New Donor',67598,78799.00,1.17,5915450.93,87.51,75.07) 
INSERT INTO #temp VALUES ('Reactivated',19853,27394.00,1.38,4348419.38,219.03,158.74) 
INSERT INTO #temp VALUES ('2yrs consecutive',20604,31633.00,1.54,3556766.75,172.63,112.44) 
INSERT INTO #temp VALUES ('3/4yrs consecutive',7536,13251.00,1.76,1827917.34,242.56,137.95) 
INSERT INTO #temp VALUES ('5+yrs consecutive',9354,31381.00,3.35,13138479.70,1404.58,418.68) 

頂行,「送禮單」是來自主要查詢的彙總子句的結果(不確定是否影響計算出百分比(這意味着單個禮品類別本質上是每列的總價值),並且每個ca tegory選項來自應用於查詢的group by子句。

我想要的是能夠添加兩個新列,'價值百分比'和'count_people百分比',其中value的百分比= row value05/total value05(這是value05的單值禮物'類別)。 count_people的百分比將是count_people行值,再由總(這是包含在情況下,「單類禮品行」

我SQL Server 2005上,有助於劃分。

謝謝!

回答

2

該查詢會給你你的百分比按行排列:

SELECT category, count_people, numpayments05, avegifts05, value05, donorvalue05, giftvalue05, 
    value05/SUM(CASE category WHEN 'Single Gifts' THEN value05 ELSE 0.0 END) 
     OVER (PARTITION BY 1) AS [percentage of value], 
    count_people/SUM(CASE category WHEN 'Single Gifts' THEN count_people ELSE 0.0 END) 
     OVER (PARTITION BY 1) AS [percentage of count_people] 
FROM #temp ; 


假設你在#TEMP創建兩個新列有以下幾點:

CREATE TABLE #temp 
(category varchar(30) 
,count_people INT 
,numpayments05 INT 
,avegifts05 DECIMAL(4,2) 
,value05 DECIMAL(18,2) 
,donorvalue05 DECIMAL(18,2) 
,giftvalue05 DECIMAL(18,2) 
,[percentage of value] decimal(5,2) 
,[percentage of count_people] decimal(5,2) 
) 
INSERT INTO #temp VALUES ('Single Gifts',124945,182458.00,1.46,28787034.10,230.40,157.77, null, null) 
INSERT INTO #temp VALUES ('New Donor',67598,78799.00,1.17,5915450.93,87.51,75.07, null, null) 
INSERT INTO #temp VALUES ('Reactivated',19853,27394.00,1.38,4348419.38,219.03,158.74, null, null) 
INSERT INTO #temp VALUES ('2yrs consecutive',20604,31633.00,1.54,3556766.75,172.63,112.44, null, null) 
INSERT INTO #temp VALUES ('3/4yrs consecutive',7536,13251.00,1.76,1827917.34,242.56,137.95, null, null) 
INSERT INTO #temp VALUES ('5+yrs consecutive',9354,31381.00,3.35,13138479.70,1404.58,418.68, null, null) 


您可以運行下面的更新,以節省每行的百分比:

WITH cte AS 
    (SELECT category, 
    value05/SUM(CASE category WHEN 'Single Gifts' THEN value05 ELSE 0.0 END) 
     OVER (PARTITION BY 1) AS [percentage of value], 
    count_people/SUM(CASE category WHEN 'Single Gifts' THEN count_people ELSE 0.0 END) 
     OVER (PARTITION BY 1) AS [percentage of count_people] 
    FROM #temp 
    ) 

UPDATE #temp 
SET [percentage of value] = cte.[percentage of value], 
    [percentage of count_people] = cte.[percentage of count_people] 
FROM #temp 
JOIN cte ON #temp.category = cte.category 
+0

謝謝爲此 - 我不會想到將這個類別放入1個分區 – Dibstar 2010-09-16 10:00:22

1

做它在使用第一輸入第二查詢。不要試圖修改第一查詢並增加這些計算,它很複雜,因爲它是。