sql - 如何合并来自两个不同来源的数据
问题描述
为我的“愚蠢”问题道歉,但我根本不熟悉 SQL。
我有以下两个查询,我只想返回这两者之间的区别:
SELECT [TIME],Consumption, temperature, speed
FROM database1
WHERE Rev = '1' AND genDate = '2018-09-20' AND runDate = '2018-09-19'
ORDER BY [TIME]
SELECT [TIME],Consumption, temperature, speed
FROM database1
WHERE Rev = '1' AND genDate = '2018-09-19' AND runDate = '2018-09-18'
ORDER BY [TIME]
我正在尝试这样的事情:
SELECT [TIME],Consumption, temperatureDiff, speedDiff
我想我应该使用INNER JOIN
,但是这两个查询可能没有相同的行数。最终的目标是保留所有行,如果一个查询中没有一行,则在减法中使用 0 代替。
表格样本:
解决方案
尽管OUTER JOIN
and ISNULL()
orCOALESCE()
答案有效,但有一个更复杂的选项,不需要JOIN
.
SELECT
[TIME],
SUM(CASE WHEN genDate = '2018-09-19' THEN -consumption ELSE consumption END) AS ConsumptionDiff,
SUM(CASE WHEN genDate = '2018-09-19' THEN -temperature ELSE temperature END) AS TemperatureDiff,
SUM(CASE WHEN genDate = '2018-09-19' THEN -speed ELSE speed END) AS SpeedDiff
FROM
database1
WHERE
(Rev = '1' AND genDate = '2018-09-20' AND runDate = '2018-09-19')
OR (Rev = '1' AND genDate = '2018-09-19' AND runDate = '2018-09-18')
GROUP BY
[Time]
有些人可能认为更整洁的另一种选择......
SELECT
[TIME],
SUM(relative_data.consumption) AS ConsumptionDiff,
SUM(relative_data.temperature) AS TemperatureDiff,
SUM(relative_data.speed ) AS SpeedDiff
FROM
database1
CROSS APPLY
(
SELECT consumption, temperature, speed WHERE genDate = '2018-09-20' AND runDate = '2018-09-19'
UNION ALL
SELECT -consumption, -temperature, -speed WHERE genDate = '2018-09-19' AND runDate = '2018-09-18'
)
relative_data
WHERE
Rev = '1'
GROUP BY
[Time]
推荐阅读
- python-3.x - 使用 Splinter 在网站的 textarea 中填充表格或值列表
- android - 使 onClickListener 成为静态方法
- sql-server - 如何在 SQL Server 2014 中实现行级安全性
- reactjs - React 找不到组件
- jmeter - 如何创建正则表达式以从字符串响应中提取值?
- javascript - 如果已经执行,Javascript 函数会阻止执行
- python - 从输入中获取值
- python - 是否可以通过给定的向量平铺每一行不同的时间
- python - 在 python 中替代 os.path.join 将 png 文件分组到一个变量中
- html - 使用 JSPDF 将 DOM 对象下载为 PDF 时出错