2014-01-16 12 views
1

У меня есть две таблицы с столбцом с именем no_id, я хочу проверить, что значения в обоих столбцах на таблицах одинаковы.Сравните суммы двух столбцов в sql

Так что я пытаюсь суммировать значения обоих столбцов и сравнивать результат.

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 содержит только числовые строки, я следующий запрос, чтобы гарантировать, что нуль будет рассматриваться как 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 

Тогда, почему он не работает с обеими таблицами?

+0

no_id - это varchar (16), как вы можете просто добавить и добавить? Вы уверены, что no_id содержит только числовые строки? – IndoKnight

+0

no_id одинаково в обоих таблицах? Могут ли они объединиться no_id? –

+0

@IndoKnight, если 'no_id' не содержит числовой строки, запрос на трансляцию и, следовательно, запрос не будут выполнены. –

ответ

2

Как я уже говорил в комментариях:

  1. Не используйте запятую (,) оператора в ЕКОМ, это было устаревшим уже более двадцати лет, используйте JOIN синтаксис ключевых слов вместо этого. Потому что, если вы это сделали, вы бы знали, что ...
  2. Вы - CROSS JOIN - ваши столы очень плохие и логически ошибочные в 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 
2

Проблема в том, вы не говорите, как table_a и table_b связаны между собой, так каждый строка в table_a паре с каждый строк в table_b, если обе таблицы имеет хотя бы одно нулевое значение, тогда общая сумма будет равна нулю.

Если вы просто хотите, чтобы SUMS в обеих таблицах совпадали, тогда я не уверен, что SUM является лучшим индикатором. Если таблица A имела значения 1 и 4, а таблица b имела 2 и 3, тогда SUM будет соответствовать, но, очевидно, значения разные.

Смежные вопросы