Sql - назначить несколько переменных из результата запроса с условием - PullRequest
0 голосов
/ 04 октября 2018

Предположим, запрос

SELECT RecordType, COUNT(*) RecordsCount FROM Records AS WHERE ... GROUP BY RecordType возвращает эту таблицу:

------------------------------
|RecordType   | RecordsCount |
------------------------------
|      1       |    15       |
------------------------------
|      2       |    10       |
------------------------------
|      3       |    8        |
------------------------------

Я определил эти переменные:

DECLARE @paymentRecordCount INT = 0;
DECLARE @dataRecordCount INT = 0;

Я ищуспособ установить сразу обе переменные - @paymentRecordCount переменная к результату условия where RecordType = 1, и установить @dataRecordCount переменную к результату условия where RecordType = 3.

Единственный способ, который я нашел до сих пор, - это несколько раз вычислить запрос на выборку, например: select @dataRecordCount = RecordsCount from (select ... from ..) where RecordType = 3, и сделать то же самое для другой переменной, например: select @paymentRecordCount = RecordsCount from (select ... from ..) where RecordType = 1

Есть способ вычислить запрос один раз и установить обе переменные вместе?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018
SELECT
    @paymentRecordCount = SUM(CASE WHEN RecordType = 1 THEN 1 END),
    @dataRecordCount    = SUM(CASE WHEN RecordType = 3 THEN 1 END)
FROM
    Records
WHERE
    ... 
    AND RecordType IN (1, 3)
0 голосов
/ 04 октября 2018

Вы можете использовать оператор с одним подзапросом на RecordType, но вы должны рассмотреть случай, когда (если) существует несколько значений на RecordType:

declare @table Table (recordtype int, recordscount int)
insert @table values (1, 1);
declare @dataRecordCount int, @paymentRecordCount int;

SELECT
@paymentRecordCount = (SELECT RecordsCount FROM @table WHERE RecordType=1),
@dataRecordCount = (SELECT RecordsCount FROM @table WHERE RecordType=3);


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