2015-03-13 4 views
0

У меня есть 2 стола. Я хочу сравнить количество строк в таблице А до значения в таблице B:Как сравнить count() со значением из другой таблицы?

select count(1) from table_a; -- returns 1500 
select row_count from table_b; -- returns 1490 

Хочу сравнить числа и выполнить и записать строку в таблице C, соответственно. Я думал о выполнении объединения, но это не делает смысл, так как значения от а и Ь не имеют никакого отношения:

select 
     count(a.*) as rows_in_table 
    , b.lines_in_loadfile 
from 
    [table_a] a 
    cross join [table_b]  
; 

Теперь я запутался. В псевдо, что мне нужно:

select 
    count(1) from table_a as value_a 
    row_count from table_b as value_b 

case 
    when value_a <> value_b then msg = 'values do not match' 
    else msg = 'values match' 
end 

insert into table_c (row_msg) = @msg; 

Как это сделать в 1 запросе? Я совершенно уверен, что это не так сложно, но смотришь на него в течение часа и застрял.

+0

что такое 'row_count'? это столбец в таблице с одной строкой? это должно быть «count (1)» тоже? – Tanner

+0

Нет, это переменная из таблицы переменных. В действительности это нечто вроде 'number_of_lines_of_file_xxx' – Pr0no

ответ

0

Это путь:

INSERT INTO TABLE_C 
    (row_msg) 

    SELECT 
      CASE 
     WHEN COUNT(a.*) <> b.lines_in_loadfile THEN 'Values do not match' 
     ELSE 'Values match' 
    END 
    FROM 
     [table_a] a 
     cross join [table_b] 
1
insert into table_c (row_msg) 
select 
    CASE 
     WHEN 
      (selectcount(1) from table_a) != 
      (select row_count from table_b) THEN 'values do not match' 
     ELSE 'values match' 
    END 

Я не уверен, о "выберите row_count из TABLE_B" части. Как вы убедитесь, что это возвращает только одно значение?

+0

' table_a' - таблица переменных, поэтому каждый ключ уникален. Другой вопрос: я обычно обновляю table_c через хранимую процедуру (например, 'exec dbo.audit_log 'Сравнить значения из двух таблиц', 'Matchues Match';'). Я попробовал следующее, но это не сработало. Как я могу сделать эту работу? 'Exec dbo.audit_log 'Сравнить значения из 2 таблиц' ( \t выберите случай когда (выберите кол (1) от TABLE_A)! = (Выберите row_count из TABLE_B), затем 'Значения не совпадают' еще«совпадают со значениями ' конец ) ' – Pr0no

1

если у вас есть только одна строка в каждой таблице:

SELECT a.value_a, b.value_b 
    , msg = case 
     when value_a = b.value_b then 'values do match' 
     else 'values do not match' 
     end 
FROM 
(select count(*) value_a from table_a) a , 
(select row_count value_b from table_b) b 
Смежные вопросы