Создать псевдоним в скалярном подзапросе - SQLServer - PullRequest
2 голосов
/ 18 января 2020

Я делаю это в SAS, однако принципы должны применяться с sqlserver. У меня есть таблица, которая является результатом полного объединения по номеру счета, поэтому она выглядит так:

abc_accno  xyz_accno
11111      .
22222      22222
.          66666
33333      33333
44444      44444
.          55555

Моя конечная цель - создать таблицу, которая выглядит следующим образом:

count_abc_accno  count_xyz_accno  matched_pairs
4                5                3

Итак, мой запрос таков:

create table matched_pairs as
select
     count(abc_accno) as Count_abc_AccNo
    ,count(xyz_accno) as Count_xyz_AccNo
    ,(select count(abc_accno) as matched_pairs 
        from t1
        where abc_accno = xyz_accno)
from t1
;

В итоге я получаю следующее:

count_abc_accno  count_xyz_accno  _randomname
4                5                3

Я думаю, что, вероятно, есть более элегантный способ сделать это, но мы работаем с инструментами (и знаниями), которые у нас есть. Я хочу, чтобы переменная совпадающих пар говорила совпадающие пары, но не могу понять, как получить ее от сгенерированного системой имени.

Как лучше всего это сделать go? Есть ли более элегантное решение, чем то, что я пытаюсь? (всегда, кажется, ... один день)

Ответы [ 2 ]

6 голосов
/ 18 января 2020

Используйте as, чтобы назначить псевдоним столбца:

create table matched_pairs as
    select count(abc_accno) as Count_abc_AccNo,
           count(xyz_accno) as Count_xyz_AccNo,
           (select count(abc_accno)
            from t1
            where abc_accno = xyz_accno
           ) as matched_pairs 
    from t1;

Псевдоним в подзапросе не имеет отношения к внешнему запросу. Подзапрос просто возвращает значение. Вы должны назначить псевдоним во внешнем запросе.

0 голосов
/ 18 января 2020

Также рассмотрите возможность отказа от использования подзапроса и суммируйте логическое условие для подсчетов, поскольку True разрешается как 1, а False как 0.

create table matched_pairs as
select
     count(abc_accno) as Count_abc_AccNo
    , count(xyz_accno) as Count_xyz_AccNo
    , (abc_accno = xyz_accno)
from t1;

На SQL сервере вам может потребоваться заключить в case заявление

create table matched_pairs as
select
     count(abc_accno) as Count_abc_AccNo
    , count(xyz_accno) as Count_xyz_AccNo
    , (case when abc_accno = xyz_accno then 1 else 0 end)
from t1;
...