想知道是否有人有关于使用U-SQL实现案例或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教程here
使用?:代替CASE的示例可在Common SQL Expressions in U-SQL下的官方U-SQL语言参考站点获得。
自2018年春季以来,U-SQL支持ANSI CASE
表达式,发布说明为here。一个简单的例子:
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
选择 FirstName,LastName, 薪水,DOB, (性别=='M')? '男' (性别=='F')? '女性'作为性别 来自员工;
这将适用于您的案例
由于其他答案没有提供完全相同的答案,我在下面提供相同的内容。
U-SQL中的相应表达式是。我们必须使用条件表达式(?:
)。有关更多信息,请参阅以下链接:
C# Expressions for ?: TSQL and USQL equivalents
SELECT
FirstName, LastName,
Salary, DOB,
(Gender == "M") ? "Male" : (Gender == "F") ? "Female" : "Unknown" AS Gender
FROM Employees;