在标量子查询中创建别名-SQLServer

问题描述 投票:0回答:2

我正在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

我认为可能有一种更优雅的方法来执行此操作,但是我们将使用现有的工具(和知识)进行工作。我希望匹配对变量表示匹配对,但无法弄清楚如何将其从系统生成的名称中删除。

进行此操作的最佳方法是什么?是否有比我正在尝试的解决方案更优雅的解决方案? (似乎总是……一天)

sql sql-server subquery alias scalar
2个回答
4
投票

使用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
投票

也考虑放弃子查询的使用,并且由于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 Server中,您可能需要用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;
© www.soinside.com 2019 - 2024. All rights reserved.