-2

質問があります:

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

私の問題は、これを選択することです:

percentof * pm.score

派生列のエイリアスなのでpercentof、他の列での使用方法がわかりません。

  1. を選択するにはどうすればよいpercentof * pm.scoreですか?
  2. それが難しすぎる場合percentof、テーブルに永続的な列として追加するにはどうすればよいですか?
4

3 に答える 3

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

計算中の列のエイリアスはpercentof、サブクエリで使用されない限り、別の列では使用できません。

于 2012-09-11T20:44:16.380 に答える
3

ビューを作成します。

CREATE VIEW dbo.whatever
AS 
    SELECT 
      t.*, -- NAME THESE COLUMNS!!!
      PercentOf = (t.total_pain_patients / NULLIF ((SELECT Sum(t2.total_pain_patients)
         FROM   dbo.[topplansperprovider] AS t2
         WHERE  t2.[INDEX_IMSID] = t.[INDEX_IMSID]
         AND t2.plan_rank BETWEEN 1 AND 10), 0)) * 100,
      pm.* -- NAME THESE COLUMNS!!!
  FROM dbo.[topplansperprovider] AS t
  LEFT OUTER JOIN dbo.[payer Mapping] AS pm
  ON LOWER(t.Plan_Name_OR_Payment_Type) = LOWER(pm.[ims payer name])
  WHERE t.INDEX_IMSID = '1753841';
GO

これで、クエリは次のようになります。

SELECT *, [something] = PercentOf * score -- NAME THIS ALIAS!
  FROM dbo.whatever
  ORDER BY 6 ASC; -- NAME THIS COLUMN!!!

ただし、特に次の観点から、遅延構文の使用を停止してください。SELECT *

そして使用をやめORDER BY [ordinal]てください:

これらは両方とも、最終的にあなたに痛みを引き起こす悪い習慣です。

于 2012-09-11T21:02:22.993 に答える
1

最良の答えではありませんが、ビューに「永続的な」列を持つビューを作成できます。

于 2012-09-11T20:42:53.803 に答える