我想根据SQL Server查询中某些其他列名的值显示别名。对于例如
SELECT P.Amount AS (CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END)
FROM Person P
我知道上述情况不对,但这样的事情会有所帮助。
答案 0 :(得分:12)
我不确定你是否可以添加动态别名,但你应该可以做这样的事情(如果你只有几个可能的别名):
SELECT
CASE P.Type WHEN 'Individual' THEN P.Amount ELSE NULL END AS Salary,
CASE P.Type WHEN 'Individual' THEN NULL ELSE P.Amount END AS Profit
FROM
Person p
答案 1 :(得分:2)
“别名”名称是您要返回的数据的整个列的名称。这不可能在“按行”的基础上进行更改。
动态更改列名(别名)的唯一方法是使用动态SQL来构建查询。但是,这似乎不是您想要做的。
答案 2 :(得分:1)
您需要将金额作为“金额”返回,然后返回包含该金额“类型”的额外列。
i.e.g
SELECT P.Amount, CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END AS AmountType
FROM Person P
答案 3 :(得分:1)
不能做......
SQL返回一个recorset,每列只能有一个名称/别名。
如果查询返回的某些记录是“个人”而某些是其他类型的,那么它会选择哪个名称?
当然,正如几个响应中所建议的那样,您可以修改查询返回的列数,并根据需要为每个列命名,但是处理这样的结果集,然后可能需要额外的逻辑,这会破坏目的,因为如果一个人想要额外的逻辑,他/她可以只选择金额和类型,并在属性命名中处理这些值,例如在应用程序级别......
答案 4 :(得分:0)
列可以只有一个名称。如果您的行集只包含一行,那么您可以先查看行的“类型”列,然后相应地更改列的名称。如果它包含多行,则根本不可能。
IF 1 = (SELECT COUNT(*) FROM Person P WHERE <where-criteria>) THEN
IF 'Individual' = (SELECT P.Type FROM Person P WHERE <where-criteria>) THEN
SELECT P.Amount AS Salary
FROM Person P
WHERE <where-criteria>
ELSE
SELECT P.Amount AS Profit
FROM Person P
WHERE <where-criteria>
END IF
ELSE
SELECT P.Amount AS SalaryOrProfit
FROM Person P
WHERE <where-criteria>
END IF
我认为你可能需要重新审视你的设计。