百分比排占总数的比例,其中每一行由分组决定
问题描述:
我敢肯定这是一个愚蠢的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上,有助于划分。
谢谢!
答
该查询会给你你的百分比按行排列:
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
答
做它在使用第一输入第二查询。不要试图修改第一查询并增加这些计算,它很复杂,因为它是。
谢谢为此 - 我不会想到将这个类别放入1个分区 – Dibstar 2010-09-16 10:00:22