我正在开发一个项目,我需要编写验证查询以验证数据。
所以我有两个表1.输入表(原始数据)2。输出表(协调数据) 目前,作为验证查询,我使用以下两个查询来获取结果&然后将两个结果复制到excel文件中以验证数据是否存在差异。
Select Date,sum(Val),sum(Vol)
From Input_table
Group by Date
Select Date,sum(Val),sum(Vol)
From Output_table
Group by Date
有什么方法可以将这两个结果放在一个查询中,还可以创建一个计算列,如.... (sum(Input_table.VAL)-sum(Output_table.VAL)) as Validation_Check
。
因此输出将如下:
Date | sum(Input_table.Val) | sum(Output_table.Val) | Validation_Check
感谢。
答案 0 :(得分:2)
您似乎需要完全加入结果,例如:
select
ifnull(I.[Date], O.[Date]) as Date,
I.Val as Input_Val,
O.Val as Output_Val,
ifnull(I.Val, 0) - ifnull(O.Val, 0) as Validation_Check
from
(
Select Date,sum(Val) as Val,sum(Vol) as Vol
From Input_table
Group by Date
) as I
full outer join
(
Select Date,sum(Val) as Val,sum(Vol) as Vol
From Output_table
Group by Date
) as O on O.[Date] = I.[Date]
答案 1 :(得分:0)
使用UNION
。这将在两个查询在列中具有相同数据类型的条件下加入两个查询。
答案 2 :(得分:0)
使用此声明:
select Date, sum(Val), sum(Vol) from (
Select Date,Val,Vol
From Input_table
union
Select Date,Val,Vol
From Input_table
)
Group by Date
这将连接内部选择中的两个表的数据,然后将其分组为一个结果
答案 3 :(得分:0)
SELECT Date, SUM(VAL) as SUM_VAL, SUM(VOL) as SUM_VOL, SUM(VAL-VOL) as Validation_Check from
(Select Date,val,vol
From Input_table
UNION ALL
Select Date,val, vol
From Output_table
) X
group by Date
我建议在这里使用UNION ALL而不是UNION,因为可能会从两个查询中获取类似的结果。
例如,您的查询1的结果类似于
2017年5月1日| 5 |五 并且您的查询2的结果具有相同的值 2017年5月1日| 5 | 5
如果使用union,则只能获得1个
实例2017年5月1日| 5 | 5
而不是
的2个实例2017年5月1日| 5 | 5
2017年5月1日| 5 | 5
答案 4 :(得分:0)
如果你的 MySQL支持全加入,那么你可以使用
SELECT
IFNULL(a.Date, b.Date) AS Date,
SUM(IFNULL(a.Val, 0)) AS Input_Val_Sum,
SUM(IFNULL(b.Val, 0)) AS Output_Val_Sum,
SUM(IFNULL(a.Val, 0) - IFNULL(b.Val, 0)) AS Validation_Check
FROM Input_table AS a
FULL OUTER JOIN Output_table AS b
ON a.Date = b.Date
GROUP BY IFNULL(a.Date, b.Date)