我想为年龄创建一个命名计算字段,并且我想在类似以下表达式的内部声明一个局部变量,但它不起作用:
DECLARE
@age INT;
@age=DateDiff("yyyy",DATE_NAIS,getdate());
CASE WHEN @age<=10 THEN 1
WHEN @age>10 AND @age<=20 THEN 2
WHEN @age>20 AND @age<=35 THEN 3
ELSE 4
END
答案 0 :(得分:1)
正确的是,您不能像试图那样在SELECT表达式的上下文中声明变量。
您有几种不同的选择,其中digital.aaron在他的评论中提供了一种选择。
另一种方法是在CTE中将其创建为人工列,然后从CTE中选择而不是在表格中进行选择:
WITH cte AS (SELECT *, DateDiff("yyyy",DATE_NAIS,getdate()) AS age FROM MyTable)
SELECT CASE
WHEN age<=10 THEN 1
WHEN age>10 AND age<=20 THEN 2
WHEN age>20 AND age<=35 THEN 3
ELSE 4
END AS SomeColumn
FROM cte
答案 1 :(得分:1)
此问题带有SSAS标记,因此我猜您是在多维数据集中执行此操作?以下DAX公式将用作模型中计算所得的列,用于描述您的帖子中所描述的内容。如评论DATEDIFF
所述,仅会返回当年与该人出生年份之间的差额,这就是为什么使用YEARFRAC
来获取年份的分数,然后将其四舍五入的原因通过INT
函数向下到最接近的整数。例如,一个50岁,364天大的人将被认为是50岁,而不是51岁。由于TRUE()
是SWITCH
函数的第一个参数,因此它将评估每个条件,直到匹配为找到。
PersonAge:=
var Age = INT(YEARFRAC(YourTable[DATE_NAIS], TODAY()))
RETURN
SWITCH
(TRUE(),
Age < 10, 1,
AND(
Age > 10,
Age <= 20), 2,
AND(
Age > 20,
Age <= 35), 3,
4)