Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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 减去两个子查询_Sql_Sql Server_Select_Subquery - Fatal编程技术网

Sql 减去两个子查询

Sql 减去两个子查询,sql,sql-server,select,subquery,Sql,Sql Server,Select,Subquery,我有以下疑问。我想从和中减去数字,然后只返回结果不是0的数字。任何帮助都将不胜感激。我还想看看这是否可以在一个查询中完成。我尝试使用HAVING子句,但返回了错误的结果。使用SQLServer2008 SELECT ( SELECT station_id, SUM(tcl_missing + tcl_not_missing) as tcl_total FROM tcl_missing_summary GROUP BY station_id ) as a ( SELECT st

我有以下疑问。我想从和中减去数字,然后只返回结果不是0的数字。任何帮助都将不胜感激。我还想看看这是否可以在一个查询中完成。我尝试使用HAVING子句,但返回了错误的结果。使用SQLServer2008

  SELECT 
(
 SELECT station_id, SUM(tcl_missing + tcl_not_missing) as tcl_total
 FROM tcl_missing_summary 
 GROUP BY station_id
) as a 

(
 SELECT station_id, SUM(total) as total
 FROM tcl_breakdown_op
 WHERE tr_standard not like '%cru'
 GROUP BY station_id
) as b
 WHERE a.tcl_total - total <> 0
试试这个

; WITH CTE1 AS 
(
SELECT station_id, SUM(tcl_missing + tcl_not_missing) as tcl_total
 FROM tcl_missing_summary 
 GROUP BY station_id
), CTE2 AS
(
SELECT station_id, SUM(total) as total
 FROM tcl_breakdown_op
 WHERE tr_standard not like '%cru'
 GROUP BY station_id
)

SELECT * FROM CTE1 a
LEFT OUTER JOIN CTE2 b ON a.station_id = b.station_id
WHERE a.tcl_total - isnull(b.total,0) <> 0

如果您知道一个结果集可能没有某些工作站子集的数据,则也可以将其转换为外部联接。

我同意CTE方法中的rs,因为嵌套选择IMHO在两个或三个工作站之后会变得讨厌。CTE还可以一次一组逻辑地显示数据

但是,如果必须使用嵌套选择,只需添加几行即可完成:

SELECT a.tcl_total
from 
(
 SELECT station_id, SUM(tcl_missing + tcl_not_missing) as tcl_total
 FROM tcl_missing_summary 
 GROUP BY station_id
) as a 
,
(
 SELECT station_id, SUM(total) as total
 FROM tcl_breakdown_op
 WHERE tr_standard not like '%cru'
 GROUP BY station_id
) as b
 WHERE a.tcl_total - b.total <> 0

假设您有多个stationID

  SELECT station_id, tcl_total, total, a.tcl_total - total as diff
from (
 SELECT station_id, SUM(tcl_missing + tcl_not_missing) AS tcl_total
 FROM tcl_missing_summary 
 GROUP BY station_id
) AS a INNER JOIN

(
 SELECT station_id, SUM(total) AS total
 FROM tcl_breakdown_op
 WHERE tr_standard NOT LIKE '%cru'
 GROUP BY station_id
) AS b
ON a.stationid = b.stationid
 WHERE a.tcl_total - total <> 0

也考虑一些类似

SELECT 
    station_id,
    SUM(tcl_missing + tcl_not_missing) AS sum_tcl_total,
    SUM(total) AS sum_total,
    SUM(tcl_missing + tcl_not_missing) - SUM(total) AS diff
FROM 
    tcl_missing_summary s INNER JOIN
    tcl_breakdown_op b ON
    s.station_id = b.station_id
WHERE
     tr_standard NOT LIKE '%cru'    
GROUP BY 
    station_id
HAVING
    SUM(tcl_missing + tcl_not_missing) <> SUM(total)
SELECT 
    station_id,
    SUM(tcl_missing + tcl_not_missing) AS sum_tcl_total,
    SUM(total) AS sum_total,
    SUM(tcl_missing + tcl_not_missing) - SUM(total) AS diff
FROM 
    tcl_missing_summary s INNER JOIN
    tcl_breakdown_op b ON
    s.station_id = b.station_id
WHERE
     tr_standard NOT LIKE '%cru'    
GROUP BY 
    station_id
HAVING
    SUM(tcl_missing + tcl_not_missing) <> SUM(total)