我有一个问题:
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
是派生列的别名,我不知道如何在其他列中使用它。
percentof * pm.score
?percentof
作为永久栏添加到我的桌子上?答案 0 :(得分: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
的列别名无法在其他列中使用,除非它在子查询中使用。
答案 1 :(得分: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]
:
这些都是最终会导致痛苦的坏习惯。
答案 2 :(得分:1)
虽然不是最佳答案,但您可以创建视图以在视图中包含“永久”列。