Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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 server中不同ID的第一个值求和_Sql_Sql Server - Fatal编程技术网

我只希望对sql server中不同ID的第一个值求和

我只希望对sql server中不同ID的第一个值求和,sql,sql-server,Sql,Sql Server,我有这样的数据库: weekid overage type type2 504 400 x y 504 400 z y 503 200 x z 502 100 x x 502 100 x y 我想要的是把weekid 504的400和weekid 503的200和weekid 502的10

我有这样的数据库:

weekid    overage    type    type2
504       400        x       y
504       400        z       y
503       200        x       z
502       100        x       x
502       100        x       y
我想要的是把weekid 504的400和weekid 503的200和weekid 502的100相加,我不希望它和weekid 504或502的其他400相加

所以输出应该是sum(overage)=700

基本上,我想要的是这样做vbscript循环的东西

do until rs9.eof
    if weekid<>rs.fields("weekid") then
        weekid=rs.fields("weekid")
        overage=overage+rs.fields("overage")
    end if
rs.movenext
loop
do直到rs9.eof
如果Weekids.fields(“weekid”),那么
weekid=卢比字段(“weekid”)
overage=overage+rs.字段(“overage”)
如果结束
下一个
环
但是,在查询中需要这样做,最简单的sql查询是什么


此外,我的sql server版本似乎不支持行数,这取决于第一行的含义-数据没有固有的顺序。 当您决定如何订购物品时,可以调整下面的
orderby
子句

select sum(overage)
from
    (Select overage, row_number() over (partition by weekid order by type, type2) rn
     from yourtable
    ) v
where rn=1

您可以随机选择一个值:

select sum(overage)
from (select t.*,
             row_number() over (partition by weekid order by newwid()) as seqnum
      from t
     ) t
where seqnum = 1
如果您知道所有值都是相同的,您可能更喜欢聚合:

select sum(overage)
from (select weekid, max(overage) as overage
      from t
      group by weekid
     ) t
不要执行以下操作:

select sum(distinct overage)
虽然这是有效的SQL,但您将失去数周的相同值

如果相同weekids的值始终相同,则使用a)。
对于同一周的孩子有不同的超龄值的情况:

a) 如果需要在总和中包含相同值的不同值:

SELECT  SUM([Overage])
FROM    ( SELECT DISTINCT
                    [WeekId] ,
                    [Overage]
          FROM      [dbo].[OverageTable]
        ) tmp
SELECT  SUM([Overage])
FROM    ( SELECT    [WeekId] ,
                    MAX([Overage]) AS [Overage]
          FROM      [dbo].[OverageTable]
          GROUP BY  [WeekId]
        ) tmp
a) 如果只需要相同值的不同值的最大值即可包含在总和中:

SELECT  SUM([Overage])
FROM    ( SELECT DISTINCT
                    [WeekId] ,
                    [Overage]
          FROM      [dbo].[OverageTable]
        ) tmp
SELECT  SUM([Overage])
FROM    ( SELECT    [WeekId] ,
                    MAX([Overage]) AS [Overage]
          FROM      [dbo].[OverageTable]
          GROUP BY  [WeekId]
        ) tmp

“row_number()不是受支持的聚合函数”显然,我的sql server版本是由第一行设置为oldby我的意思是给定的第一行(或仅一行),对于每个不同的weekids@kricket-这是应该包含在您的问题中的关键信息。虽然我们大多数人似乎都认为这是事实(或有可能),但这可能会导致“错误”的结果。当两个同一周的孩子有不同的超龄值时,你需要什么?您是否需要该周孩子的最高超额年龄,或者您希望将两个超额年龄都包括在总数中?根据您的问题标题,第一个是什么意思?任何值,最大值,由某物第一次订购?请clarify@Kash对于每个不同的项目,每个超额都是相同的weekid@the显示的第一行不需要排序。只有当
超期
对于给定的
周末
的所有实例都相同时,才有效-我们没有得到足够的信息来确定是否总是这样。这也是一种黑客行为,因为这是出于不同目的的利用行为。同意。因此,我在评论中也提出了同样的问题。无论如何,我已经给出了他可能寻找的两种可能的情况。