Sql 无法获取正确的查询
我有一个名为Datatable的表。它有一个名为Sql 无法获取正确的查询,sql,sql-server,Sql,Sql Server,我有一个名为Datatable的表。它有一个名为data的列 data ------- 10 20 30 我需要得到一个列作为 data ------- 10/60 20/60 30/60 我把这个查询写成 select data/sum(data) from datatable; 试试看 但是如果你想把它连接起来 select a.data + '/' + b.total -- will result literal string va
data
的列
data
-------
10
20
30
我需要得到一个列作为
data
-------
10/60
20/60
30/60
我把这个查询写成
select data/sum(data)
from datatable;
试试看
但是如果你想把它连接起来
select a.data + '/' + b.total -- will result literal string value 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
select data + '/' + sum(data) from datatable group by data
有关连接,请检查此链接:
希望这能有所帮助。我不确定60值来自何处,但我会这样做:
select data + '/' + sum(data) from datatable group by data
有关连接,请检查此链接:
希望这有帮助。对于SQL Server 2005+您可以执行以下操作:
SELECT CAST(data AS VARCHAR(10)) + '/' + CAST(SUM(data) OVER() AS VARCHAR(10))
FROM Datatable
对于SQL Server 2005+您可以执行以下操作:
SELECT CAST(data AS VARCHAR(10)) + '/' + CAST(SUM(data) OVER() AS VARCHAR(10))
FROM Datatable
这适用于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
这适用于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
在整个表上使用窗口函数
sum
(over()
):
在整个表中使用窗口函数
求和(over()
):
您是希望文本10/60
按字面意思显示,还是希望计算该文本?(~0.166)@Damien_不信者我需要计算值你是希望文本10/60
出现,还是要计算?(~0.166)@Damien_不信者我需要计算值如果你按数据分组,你会得到10/10,20/20,30/30,我想你错了。这就是为什么我想知道他想做什么。这将返回数据(10,20,30)/每个数据的总和(30乘以10,45乘以20,等等)。如果他想计算一个值出现的次数,他应该使用count而不是sum。如果你按数据分组,那么sum(data)=data
因此你的选择将产生10/10,20/20,你们中的30/30将它们转换为varchar,否则它将为数据中的每一行生成1。这些查询中的任何一个都会给出问题中的结果。如果按data
分组,你将得到10/10、20/20、30/30,我认为你错了。这就是为什么我想知道他想做什么。这将返回数据(10,20,30)/每个数据的总和(30乘以10,45乘以20,等等)。如果他想计算一个值出现的次数,他应该使用count而不是sum。如果你按数据分组,那么sum(data)=data
,因此你的选择将产生10/10、20/20、30/30,你将它们转换为varchar,或者它将为数据中的每一行产生1个查询,这两个查询都会给出问题中的结果。上次我检查,混合字符串和数字会导致尝试将字符串转换为数字,而不是相反。@Damien_不信者是的,我将它们固定在小提琴链接上。上次我检查时,混合字符串和数字会导致尝试将字符串转换为数字,而不是相反。@Damien_不信者是的,我在fiddle链接上修复了它们。这应该可以在SQL Server 2005+上运行(尽管没有表变量和值部分)@Lamak-我不确定,而且手头没有2005实例。我知道一些聚合窗口函数在5、8和12之间发生了变化。因此,我的陈述是正确的,但并非包罗万象:-)这应该可以在SQL Server 2005+上运行(尽管没有表变量和值部分)@Lamak-我不确定,而且手头没有2005实例。我知道一些聚合窗口函数在5、8和12之间发生了变化。因此,我的说法是正确的,但并非包罗万象:-)@Kaf您正在查看SQL Server 2012文档。在此之前,不允许使用SUM
或COUNT
等聚合函数的ORDER BY
insideOVER()
。对于诸如行号
或秩
之类的windows功能,需要使用排序依据
,其中需要排序是的,您是正确的。对不起,我也在找RANK()
。更新了以上我的评论。@Kaf您正在查看SQL Server 2012文档。在此之前,不允许使用SUM
或COUNT
等聚合函数的ORDER BY
insideOVER()
。对于诸如行号
或秩
之类的windows功能,需要使用排序依据
,其中需要排序是的,您是正确的。对不起,我也在找RANK()
。更新了我的评论。