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
Sql 如果行的ID在定义的范围内,则求和行的值_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 如果行的ID在定义的范围内,则求和行的值

Sql 如果行的ID在定义的范围内,则求和行的值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有这张桌子: +----+-------+-------------------+ | ID | Value | Date | +----+-------+-------------------+ | 1 | 8 | 12/10/2015 8:00am | | 1 | 10 | 12/10/2015 8:30am | | 1 | 5 | 12/10/2015 9:00am | | 1 | 11 | 12/10/2015 9:30am

我有这张桌子:

+----+-------+-------------------+
| ID | Value |       Date        |
+----+-------+-------------------+
| 1  | 8     | 12/10/2015 8:00am |
| 1  | 10    | 12/10/2015 8:30am |
| 1  | 5     | 12/10/2015 9:00am |
| 1  | 11    | 12/10/2015 9:30am |
| 2  | 8     | 12/10/2015 8:00am |
| 2  | 6     | 12/10/2015 8:30am |
| 2  | 8     | 12/10/2015 9:00am |
| 2  | 9     | 12/10/2015 9:30am |
+----+-------+-------------------+
etc.
现在我有一个类似这样的问题(为了清楚起见简化):

返回如下内容:

+----+-------+-------------------+
| ID | Value |       Date        |
+----+-------+-------------------+
| 1  | 10    | 12/10/2015 8:00am |
| 1  | 11    | 12/10/2015 9:00am |
| 2  | 8     | 12/10/2015 8:00am |
| 2  | 9     | 12/10/2015 9:00am |
| 3  | 12    | 12/10/2015 8:00am |
| 3  | 6     | 12/10/2015 9:00am |
| 8  | 51    | 12/10/2015 8:00am |
| 8  | 58    | 12/10/2015 9:00am |
+----+-------+-------------------+
如果ID为1、2或3,我需要计算值字段的总和。
我期待这样的事情:

+------------+-------+-------------------+
|  IDfield   | Value |       Date        |
+------------+-------+-------------------+
| IDstring1  | 30    | 12/10/2015 8:00am |
| IDstring1  | 26    | 12/10/2015 9:00am |
| IDstring2  | 51    | 12/10/2015 8:00am |
| IDstring2  | 58    | 12/10/2015 9:00am |
+------------+-------+-------------------+
或者,更好的是:

+--------+--------+-------------------+
| Value1 | Value2 |       Date        |
+--------+--------+-------------------+
| 30     | 51     | 12/10/2015 8:00am |
| 26     | 58     | 12/10/2015 9:00am |
+--------+--------+-------------------+
我需要求和的ID是静态的,所以我想我可以选择其中一种解决方案,但我想不出一种方法来实现

我将尝试更好地解释预期结果:

Value1应包含ID位于(1、2、3)中的值字段的总和,按小时分组,就像我在查询中已经做的那样
Value2应该只包含ID=8的值字段

编辑:添加了源表示例,更正了当前查询(我忘了将聚合最大值()放入SELECT中的字段值)

编辑#2:添加更好的解释数据库:PostgreSql

查询:

select sum("Value") as Value1, date from "Values" where id in(1,2,3) group by date
Union ALL
select sum("Value") as Value1, date from "Values" where id=8 group by date

我想我终于得到了你想要的:

DECLARE @tbl TABLE(ID INT, Value INT, Date DATETIME);
INSERT INTO @tbl VALUES
 (1,10,'12/10/2015 8:00am')
,(1,11,'12/10/2015 9:00am')
,(2,8,'12/10/2015 8:00am')
,(2,9,'12/10/2015 9:00am')
,(3,12,'12/10/2015 8:00am')
,(3,6,'12/10/2015 9:00am')
,(8,51,'12/10/2015 8:00am')
,(8,58,'12/10/2015 9:00am');

WITH Values123 AS
(
    SELECT SUM(Value) AS Sum123,Date
    FROM @tbl
    WHERE ID IN(1,2,3)
    GROUP BY Date
)
SELECT Values123.Sum123
      ,(SELECT SUM(Value) FROM @tbl WHERE Date=Values123.Date AND ID=8)
      ,Values123.Date 
FROM Values123
结果

Sum123  Sum8    Date
30      51      2015-10-12 08:00:00.000
26      58      2015-10-12 09:00:00.000

那个查询真的执行了吗?嗯,我试着简化它,我希望我在这个过程中没有出错。。。但是,好的,我使用的那个,请提供示例数据和预期输出(与示例数据相关!),我不明白,您想要什么。更糟糕的是,我甚至无法理解逻辑…检查下面的链接,正如@Shnugo所说,您需要添加一些关于预期结果逻辑的解释。为什么不干脆跳过您的
联合所有
,而改为
在(1,2,3,8)
?(不确定这是否是问题的答案。)这对我很有帮助,我没有按照我的要求完美地理解它,但我找到了另一种方法,多亏了这个。谢谢,这让我更接近完美的答案。
Sum123  Sum8    Date
30      51      2015-10-12 08:00:00.000
26      58      2015-10-12 09:00:00.000