Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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查询连接到一个_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

将两个SQL Server查询连接到一个

将两个SQL Server查询连接到一个,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,在数据库中,查询是从两个表运行的,一个是live,另一个是archive,但是我需要将这两个表中的数据添加到一起,下面是一个查询示例 SELECT SUM(SOPOrderReturnLine.LineTotalValue) AS Value, CONVERT(date, SOPOrderReturnLine.DateTimeCreated) AS Date FROM SOPOrderReturnLine AS SOPOrderRet

在数据库中,查询是从两个表运行的,一个是live,另一个是archive,但是我需要将这两个表中的数据添加到一起,下面是一个查询示例

SELECT     SUM(SOPOrderReturnLine.LineTotalValue) AS Value, CONVERT(date, SOPOrderReturnLine.DateTimeCreated) 
                  AS Date
FROM         SOPOrderReturnLine AS SOPOrderReturnLine 
WHERE     (SOPOrderReturnLine.AnalysisCode1 LIKE 'angela%') AND (CONVERT(date, SOPOrderReturnLine.DateTimeCreated) > DATEADD(day, - 15, GETDATE()))
GROUP BY CONVERT(date, SOPOrderReturnLine.DateTimeCreated)
ORDER BY Date

此查询汇总了live表中的数据,存档表的结构与此完全相同,但称为SOPORDERROUNTLINEARCH,将此合并到一个查询中的最佳方式是什么,因此,对于列,值将是该日期的两个表的总和,而不是现在的SOPOrderReturnLine。

使用UNION ALL组合这两个表,然后像以前一样执行其余操作:

SELECT     SUM(SOPOrderReturnLine.LineTotalValue) AS Value, CONVERT(date, SOPOrderReturnLine.DateTimeCreated) 
                  AS Date
FROM (SOPOrderReturnLine
      UNION ALL
      SOPOrderReturnLineArch
      ) AS SOPOrderReturnLine 
WHERE     (SOPOrderReturnLine.AnalysisCode1 LIKE 'angela%') AND (CONVERT(date, SOPOrderReturnLine.DateTimeCreated) > DATEADD(day, - 15, GETDATE()))
GROUP BY CONVERT(date, SOPOrderReturnLine.DateTimeCreated)
ORDER BY Date
或者结合两种结果:

SELECT     SUM(SOPOrderReturnLine.LineTotalValue) AS Value, CONVERT(date, SOPOrderReturnLine.DateTimeCreated) 
                  AS Date
FROM SOPOrderReturnLine 
WHERE     (SOPOrderReturnLine.AnalysisCode1 LIKE 'angela%') AND (CONVERT(date, SOPOrderReturnLine.DateTimeCreated) > DATEADD(day, - 15, GETDATE()))
GROUP BY CONVERT(date, SOPOrderReturnLine.DateTimeCreated)
UNION ALL
SELECT     SUM(SOPOrderReturnLine.LineTotalValue) AS Value, CONVERT(date, SOPOrderReturnLine.DateTimeCreated) 
                  AS Date
FROM SOPOrderReturnLineArc AS SOPOrderReturnLine 
WHERE     (SOPOrderReturnLine.AnalysisCode1 LIKE 'angela%') AND (CONVERT(date, SOPOrderReturnLine.DateTimeCreated) > DATEADD(day, - 15, GETDATE()))
GROUP BY CONVERT(date, SOPOrderReturnLine.DateTimeCreated)
ORDER BY Date

汇总每个表中的结果,使用union all将它们汇总在一起,然后重新汇总:

SELECT date, SUM(VALUE) as total_value
FROM ((SELECT CONVERT(date, orl.DateTimeCreated) as date,
              SUM(orl.LineTotalValue) AS Value
       FROM SOPOrderReturnLine AS orl 
       WHERE orl.AnalysisCode1 LIKE 'angela%') AND
             (CONVERT(date, orl.DateTimeCreated) > DATEADD(day, - 15, GETDATE()))
       GROUP BY CONVERT(date, orl.DateTimeCreated)
      ) UNION ALL
      (SELECT CONVERT(date, orl.DateTimeCreated) as date,
              SUM(orl.LineTotalValue) AS Value
       FROM SOPOrderReturnLine_archive AS orl 
       WHERE orl.AnalysisCode1 LIKE 'angela%') AND
             (CONVERT(date, orl.DateTimeCreated) > DATEADD(day, - 15, GETDATE()))
       GROUP BY CONVERT(date, orl.DateTimeCreated)
      ) 
     ) x
GROUP BY date
ORDER BY Date;

在联合之前进行聚合将为SQL Server提供更多的优化机会。这并不总是比仅在union all之后进行聚合快,但可能是这样。

使用此方法为每个日期创建了两行,如果我想将每个日期的值一起添加,我该怎么做?400.00 2015-01-15 1145.99 2015-01-15 1498.64 2015-01-16 764.50 2015-01-19 288.11 2015-01-19这是结果的一部分,所以对于第15天,我想将它们加在一起,依此类推,如果每天有多行耶,表的结构完全相同当我运行此操作时,我得到错误消息8120,级别16,状态1,第2行列“SOPOrderReturnLine.DateTimeCreated”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。