簡體   English   中英

比較SQL中兩列的總和

[英]Compare sums of two columns in sql

我有兩個表,其列名為no_id,我想測試表中兩列的值是否相同。

因此,我試圖對兩列的值求和並比較結果。

SELECT
CASE
    WHEN SUM (cast(a.no_id as bigint)) = SUM(cast(b.no_id as bigint)) THEN 'YES'
    ELSE 'NO'
END as no_id
FROM table_a as a
    ,table_b as b

查詢的結果為否,但是當我選擇每個總和時:

SELECT
    SUM (cast(a.no_id as bigint)),
    SUM(cast(b.no_id as bigint))
FROM table_a as a
    ,table_b as b

我有兩個空值,每列一個。 而不是列的總和。

我必須對兩個表的其他二十列進行此操作。

兩個表中的no_id都是varchar(16)。

------更新------

no_id僅包含數字字符串,我進行了下一個查詢以確保將null視為0:

    SELECT
    SUM(cast(ISNULL(a.no_id,0) as bigint)),
SUM(cast(ISNULL(b.no_id,0) as bigint))
    FROM table_a as a
    ,table_b as b

但是我一直得到相同的結果。

如果我僅從一張表中選擇結果,那么它可以工作,我得到的總和是:

    SELECT
    SUM(cast(ISNULL(a.no_id,0) as bigint))
    FROM table_a as a

然后,為什么它不能同時用於兩個表?

正如我在評論中所說:

  1. 不要在FROM子句中使用逗號( , )運算符,因為它已經過了二十多年了,請改用JOIN關鍵字語法。 因為如果您這樣做,您將知道...
  2. 您正在交叉聯接-正在創建您的表,這非常糟糕,並且在99%的時間上在邏輯上是錯誤的。 您需要改為使用列子查詢。

像這樣:

SELECT
CASE
    WHEN (SELECT SUM(cast(no_id as bigint)) FROM table_a)
       = (SELECT SUM(cast(no_id as bigint)) FROM table_b)  THEN 'YES'
    ELSE 'NO'
END as no_id

問題是,你不說怎么table_atable_b是相關的,所以在table_a是搭配每一table_b如果任一表有連一個空值,那么總和將是無效的。

如果您只是希望兩個表中的SUMS匹配,那么我不確定SUM是最好的指標。 如果表A的值為1和4,表b的值為2和3,則SUM將匹配,但顯然值是不同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM