在U-SQL中实现Case语句

时间:2016-05-16 14:27:48

标签: u-sql

想知道是否有人建议使用U-SQL实现案例或IF语句。例如,我如何转换它:

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees;

6 个答案:

答案 0 :(得分:5)

你可以使用内联C#表达式来处理类似的简单事情(虽然没有测试)

SELECT
    FirstName, LastName,
    Salary, DOB,
    Gender == "Male" ? "M" : "F"
FROM Employees

如果更复杂,可以考虑在C#中编写用户定义的运算符 查看MSDN教程here

答案 1 :(得分:2)

使用?:代替CASE的示例可在Common SQL Expressions in U-SQL下的官方U-SQL语言参考站点获得。

答案 2 :(得分:2)

自2018年春季以来,U-SQL根据发行说明here支持ANSI CASE表达式。一个简单的示例:

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);

答案 3 :(得分:0)

上述解决方案是正确的。但我更喜欢使用IF代替内联C#代码。

SELECT
    FirstName, LastName,
    Salary, DOB,
    IF(Gender == "Male", "M", "F") AS Gender
FROM Employees

答案 4 :(得分:0)

选择
    名字,姓氏,
    工资,DOB,
    (性别=='M')?男性
    (性别=='F')? “女性” AS性别

来自员工;

这将适用于您的案例

答案 5 :(得分:0)

由于其他答案没有提供完全相同的答案,因此我在下面提供了相同的答案。

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;