Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法获取正确的查询_Sql_Sql Server - Fatal编程技术网

Sql 无法获取正确的查询

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

我有一个名为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 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

我不确定60值来自何处,但我会这样做:

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
inside
OVER()
。对于诸如
行号
之类的windows功能,需要使用
排序依据
,其中需要排序是的,您是正确的。对不起,我也在找
RANK()
。更新了以上我的评论。@Kaf您正在查看SQL Server 2012文档。在此之前,不允许使用
SUM
COUNT
等聚合函数的
ORDER BY
inside
OVER()
。对于诸如
行号
之类的windows功能,需要使用
排序依据
,其中需要排序是的,您是正确的。对不起,我也在找
RANK()
。更新了我的评论。