【问题标题】:Create Alias in Scalar Subquery - SQLServer在标量子查询中创建别名 - SQLServer
【发布时间】:2020-05-04 19:00:26
【问题描述】:

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


    【解决方案1】:

    使用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;
    

    子查询中的别名在外部查询中没有相关性。子查询只是返回一个值。您必须在外部查询中分配别名。

    【讨论】:

      【解决方案2】:

      考虑同时放弃使用子查询并将计数的逻辑条件求和,因为 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;
      

      【讨论】:

        猜你喜欢
        • 2011-10-28
        • 2014-11-29
        • 2019-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 1970-01-01
        相关资源
        最近更新 更多