2013-01-31 138 views
0

我有一個名爲Datatable的表。它有一個名爲data的列。無法獲得正確的查詢

data 
------- 
10  
20  
30 

我需要得到一個列

data 
------- 
10/60 
20/60 
30/60 

我寫的查詢作爲

select data/sum(data) 
    from datatable; 
+3

您是否希望字面上出現「10/60」文本或計算該文本? (〜0.166) –

+0

@Damien_The_Unbeliever我需要計算的值 – user1925921

回答

2

嘗試,

select a.data/b.total  -- will result the quotient of 10/60 
from datatable a, 
     (select SUM(data) total from datatable) b 

但如果你想它要連接

select a.data + '/' + b.total -- will result literal string value of 10/60 
from datatable a, 
     (select SUM(data) total from datatable) b 
+1

最後我檢查,混合字符串和數字導致嘗試將字符串轉換爲數字,而不是其他方式。 –

+0

@Damien_The_Unbeliever是的,我把它們固定在小提琴鏈上。 –

-1

我不知道在60值從何而來,但我會做這樣的事情:

select data + '/' + sum(data) from datatable group by data 

進行連結,請檢查此鏈接: http://msdn.microsoft.com/en-us/library/aa276862(v=sql.80).aspx

希望這會有所幫助。

+0

如果你按'data'分組,你會得到10/10,20/20,30/30 – Tobsey

+0

我認爲你錯了。這就是爲什麼我想知道他想要做什麼。這將返回數據(10,20,30)/每個的總和(30次10次,45次20等)。如果他想計算一個值出現的次數,他應該使用count而不是sum。 –

+0

如果按數據分組,那麼SUM(data)= data'因此,你的選擇會產生10/10/20/20,30/30你將它們轉換爲varchar,或者它將產生1可用數據表中的每一行 – Tobsey

3

對於SQL Server 2005+,你可以這樣做:

SELECT CAST(data AS VARCHAR(10)) + '/' + CAST(SUM(data) OVER() AS VARCHAR(10)) 
FROM Datatable 
+0

+1使用'CAST'和'OVER' :) – bonCodigo

+0

+1這工作,我測試[這裏](http://sqlfiddle.com/#!3/a1c0a/10)。 – Kaf

+0

@Kaf您正在查看SQL Server 2012文檔。在此之前,'OVER()'內的'ORDER BY'用於聚合函數,比如'SUM'或'COUNT'不被允許。 'ORDER BY'是窗口函數所必需的,如'ROW_NUMBER'或'RANK',其中需要訂單 – Lamak

0

這工作的SQL Server 2005或更高版本上:

declare @t table (data int) 
insert into @t (data) values (10),(20),(30) 

select (data * 1.0)/ SUM(data) OVER() from @t 
+0

這應該在SQL Server 2005+上工作(儘管沒有表變量和'VALUES'部分) – Lamak

+0

@Lamak - 我不確定,並且沒有2005實例。我知道某些聚合窗口函數在5,8和12之間發生了變化。所以我的陳述是真實的,但不是全部包含:-) –