sql - 将一个表中的行与另一表中的总和值连接起来

标签 sql sql-server sql-server-2014

我有一个表 IPAddressHistory,其中包含三列 IPAddressIDDateFromDateTo,以及另一个表 < strong>IPAddressTimeValue,包含特定时间的详细值。因此,我需要从 IPAddressHistory< 中的 DateFromDateTo 之间与 IPAddressID 相关的 IPAddressTimeValue 中选择 SUM 值/强>。你可以从sqlfiddle看到我想要的东西,例如,我使用了来自 IPAddressHistory 和 UNION ALL 的简单静态日期。谢谢。

初始表格:

CREATE TABLE IPAddressHistory(
  [IPAddressHistoryID] int IDENTITY(1,1) NOT NULL,
  [IPAddressID] int NOT NULL,
  [DateFrom] datetime,
  [DateTo] datetime,
CONSTRAINT [PK_IPAddressHistory] PRIMARY KEY CLUSTERED 
(
    [IPAddressHistoryID] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY];

CREATE TABLE IPAddressTimeValue(
  [IPAddressTimeValueID] int IDENTITY(1,1) NOT NULL,
  [IPAddressID] int NOT NULL,
  [Time] datetime,
  [CCNI] int,
  [TRNI] int,
CONSTRAINT [PK_IPAddressTimeValue] PRIMARY KEY CLUSTERED 
(
    [IPAddressTimeValueID] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY];

初始数据:

enter image description here enter image description here

结果输出: enter image description here

最佳答案

您需要的查询是这个:

select a.[IPAddressID], 
       a.[DateFrom], 
       a.[DateTo], 
       SUM([CCNI]) [CCNI], 
       SUM([TRNI]) [TRNI]
  from IPAddressHistory a
         INNER JOIN IPAddressTimeValue b 
                ON (a.[IPAddressID] = b.[IPAddressID])
 where b.[Time] > a.[DateFrom]
   and b.[Time] <= a.[DateTo]
 group by a.[IPAddressID], a.[DateFrom], a.[DateTo];

看看它在这里与您自己选择的联合一起工作:http://sqlfiddle.com/#!6/abfe6/5

要根据需要格式化日期(datefrom 和 dateto),只需使用一些日期格式函数即可。不要忘记在选择字段和分组依据上使用它。

关于sql - 将一个表中的行与另一表中的总和值连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34394431/

相关文章:

sql - 插入到 sql server 中的 sql_variant 列

sql-server-2014 - SQL Server 中具有多个整数值的 ISNULL

sql - PLS-00312 : a positional parameter association may not follow a named association

sql - 常用查询的 psql 快捷方式? (比如 Unix "alias")

sql-server - 使用CTE批量删除行时如何设置更改跟踪上下文?

sql-server - 将 SQL Server varchar max 存储在 SSIS 字符串中

SQL Server : From 2008 To 2014 :-The data types datetime and time are incompatible in the add operator. 还有其他解决方案吗?

java - sql server glassfish eclipselink jpa 问题

sql - 在表中复制列名有什么用吗?

mysql - mysqldump 的结果不明确