想知道是否有人对使用 U-SQL 实现 case 或 IF 语句有建议。例如,我如何转换这个:
SELECT
FirstName, LastName,
Salary, DOB,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
END
FROM Employees;
想知道是否有人对使用 U-SQL 实现 case 或 IF 语句有建议。例如,我如何转换这个:
SELECT
FirstName, LastName,
Salary, DOB,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
END
FROM Employees;
您可以将内联 C# 表达式用于简单的事情(虽然尚未测试)
SELECT
FirstName, LastName,
Salary, DOB,
Gender == "Male" ? "M" : "F"
FROM Employees
如果它更复杂,请考虑在 C# 中编写用户定义的运算符。
看看这里的 MSDN 教程
使用 ?: 代替 CASE 的示例可在官方 U-SQL 语言参考站点的Common SQL Expressions in U-SQL下找到。
自 2018 年春季起,U-SQL根据此处CASE
的发行说明支持 ANSI 表达式。一个简单的示例:
DECLARE @outputFile string = @"\output\output.csv";
@Employees =
SELECT *
FROM (
VALUES
( "w", "Bob", 1999, "31/12/1999", "M" ),
( "Sheena", "Easton", 1999, "31/12/1998", "F" )
) AS Employees(FirstName, LastName, Salary, dob, Gender);
@output =
SELECT FirstName,
LastName,
Salary,
dob,
CASE Gender
WHEN "M" THEN "Male"
WHEN "F" THEN "Female"
END AS Gender
FROM @Employees;
OUTPUT @output
TO @outputFile
USING Outputters.Csv(quoting : false);
上面的解决方案是正确的。但我更喜欢使用 IF 而不是内联 C# 代码。
SELECT
FirstName, LastName,
Salary, DOB,
IF(Gender == "Male", "M", "F") AS Gender
FROM Employees
选择
名字、姓氏、
薪水、出生日期、
(性别 == 'M')?'男性'
(性别 == 'F')?
“女性”作为员工的性别;
这将适用于您的案例
由于其他答案没有提供完全相同的答案,因此我在下面提供相同的答案。
U-SQL 中对应的表达式是。我们必须使用条件表达式 ( ?:
)。有关更多信息,您可以参考以下链接:
SELECT
FirstName, LastName,
Salary, DOB,
(Gender == "M") ? "Male" : (Gender == "F") ? "Female" : "Unknown" AS Gender
FROM Employees;