2013-01-16 68 views
4

假設我在SQL Server下表有:SQL服務器 - 沁整列和GROUP BY

grp:  val:  criteria: 
a  1  1 
a  1  1 
b  1  1 
b  1  1 
b  1  1 
c  1  1 
c  1  1 
c  1  1 
d  1  1 

現在,我想要的是得到一個輸出,基本上會是:

Select grp, val/[sum(val) for all records] grouped by grp where criteria = 1 

因此,考慮到符合下列條件:

Sum of all values = 9 
Sum of values in grp(a) = 2 
Sum of values in grp(b) = 3 
Sum of values in grp(c) = 3 
Sum of values in grp(d) = 1 

輸出將如下所示:

grp:  calc:  
a  2/9   
b  3/9   
c  3/9   
d  1/9 

我的SQL必須看起來像什麼?

謝謝!

+2

[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

回答

5

你應該能夠使用這樣的事情,它使用sum() over()

select distinct grp, 
    sum(val) over(partition by grp) 
    /(sum(val) over(partition by criteria)*1.0) Total 
from yourtable 
where criteria = 1 

SQL Fiddle with Demo

結果是:

| GRP |   TOTAL | 
------------------------ 
| a | 0.222222222222 | 
| b | 0.333333333333 | 
| c | 0.333333333333 | 
| d | 0.111111111111 | 
+0

這真是太棒了! - 正是我需要的! - 非常感謝bluefeet! –

+0

不客氣! :) – Taryn

1

我完全@ bluefeet的迴應同意 - 這僅僅是一個獨立於數據庫的方法(應該適用於大多數RDBMS):

select distinct 
    grp, 
    sum(val)/cast(total as decimal) 
from yourtable 
cross join 
(
    select SUM(val) as total 
    from yourtable 
) sumtable 
where criteria = 1 
GROUP BY grp, total 

這裏是SQL Fiddle

+0

謝謝@sgedded! - 絕對不是我想要做的事情,並且是我的武庫的一個很好的補充!謝謝! –