引用别名而不是重复计算

l--*_*''' -2 sql t-sql sql-server sql-server-2008

我有一个问题:

SELECT   [outer].*,
         (total_pain_patients / NULLIF ((SELECT Sum(total_pain_patients)
             FROM   [topplansperprovider]
             WHERE  [outer].[INDEX_IMSID] = [INDEX_IMSID]
             AND plan_rank BETWEEN 1 AND 10), 0)) * 100 AS PercentOf,
         pm.*,
         percentof * pm.score
FROM     [topplansperprovider] AS [outer]
left JOIN [payer Mapping] pm
on lower([outer].Plan_Name_OR_Payment_Type)=lower(pm.[ims payer name])
WHERE    INDEX_IMSID = '1753841'
ORDER BY 6 ASC
Run Code Online (Sandbox Code Playgroud)

我的问题是选择这个:

percentof * pm.score
Run Code Online (Sandbox Code Playgroud)

由于percentof是派生列的别名,我不知道如何在其他列中使用它.

  1. 我该如何选择percentof * pm.score
  2. 如果这太难了,我怎样才能将percentof永久列添加到我的表中?

Tar*_*ryn 6

您不能使用这样的别名,您必须将查询包装在另一个选择中:

select x.*, x.percentof*x.pm.score newvalue
from
(
    SELECT   [outer].*,
             (total_pain_patients / NULLIF ((SELECT Sum(total_pain_patients)
                                             FROM   [topplansperprovider]
                                             WHERE  [outer].[INDEX_IMSID] = [INDEX_IMSID]
                                                    AND plan_rank BETWEEN 1 AND 10), 0)) * 100 PercentOf,
             pm.*
    FROM     [topplansperprovider] AS [outer]
    left JOIN [payer Mapping] pm
        on lower([outer].Plan_Name_OR_Payment_Type)=lower(pm.[ims payer name])
) x
WHERE    x.INDEX_IMSID = '1753841'
ORDER BY 6 ASC
Run Code Online (Sandbox Code Playgroud)

您正在计算的列别名percentof不能在另一列中使用,除非它在子查询中使用.