где условие основано на нескольких столбцах с максимальным количеством записей - PullRequest
0 голосов
/ 09 июля 2020

У меня странное требование. В таблице 1 у меня есть столбец 1, а в таблице 2 - столбцы col1 и col2

теперь мне нужно запросить то, что имеет максимальное количество записей

Table 1
A      col2   col3
123    xxxx   xxyy
234    ysx    ddd


Tabl2
A       B       col3        col4
123     321     xx      yy
123     567     fdfdh   fjfj
456     123     dhfdh   dsgds

Теперь мне нужно сравнить Table1 (A) с table2 (A и B), в зависимости от того, что имеет максимальное количество записей

пример: 123 -> есть 2 записи с table2 A и 1 запись с Table2B, поэтому мои Условие case должно получать данные из table2A, так как оно имеет максимальное количество

1 Ответ

0 голосов
/ 10 июля 2020

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

Если мое предположение верно, вы можете попробовать следующий подход: ( выполняется в SSMS)

-- Mock-up of Table1.

DECLARE @Table1 TABLE ( A INT, col2 VARCHAR(10), col3 VARCHAR(10) );
INSERT INTO @Table1 VALUES 
    ( 123, 'xxxx', 'xxyy' ), ( 234, 'ysx', 'ddd' );

-- Mock-up of Table2.

DECLARE @Table2 TABLE ( A INT, B INT, col3 VARCHAR(10), col4 VARCHAR(10) );
INSERT INTO @Table2 ( A, B, col3, col4 ) VALUES
    ( 123, 321, 'xx', 'yy' ), ( 123, 567, 'fdfdh', 'fjfj' ), ( 456, 123, 'dhfdh', 'dsgds' );

-- Query value.
DECLARE @qVal INT = 123;

-- Select data from which ever table has the greater record count of @qVal...

IF ( ( SELECT COUNT ( * ) FROM @Table1 WHERE A = @qVal ) > ( SELECT COUNT ( * ) FROM @Table2 WHERE A = @qVal OR B = @qVal ) ) BEGIN
    
    -- Table1 has the greater record count, select data from here.
    SELECT * FROM @Table1 WHERE A = @qVal;

END
ELSE BEGIN

    -- Table2 has the greater record count, select data from here.
    SELECT * FROM @Table2 WHERE A = @qVal OR B = @qVal;

END

Запуск для @qVal из 123 возвращает:

+-----+-----+-------+-------+
|  A  |  B  | col3  | col4  |
+-----+-----+-------+-------+
| 123 | 321 | xx    | yy    |
| 123 | 567 | fdfdh | fjfj  |
| 456 | 123 | dhfdh | dsgds |
+-----+-----+-------+-------+

В то время как выполняется для @qVal из 234 возвращает:

+-----+------+------+
|  A  | col2 | col3 |
+-----+------+------+
| 234 | ysx  | ddd  |
+-----+------+------+

Примечание : с учетом структуры if / else, запуск для несуществующего @qVal всегда будет возвращать пустой набор результатов из Table2.

Например, @qVal = 0 возвращает:

+---+---+------+------+
| A | B | col3 | col4 |
+---+---+------+------+

Конечно, все это основано на моем предположении о вашей реальной потребности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...