在U-SQL中实现Case语句

问题描述 投票:4回答:6

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

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees;
u-sql
6个回答
5
投票

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

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

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


2
投票

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


2
投票

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

0
投票

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

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

0
投票

选择 FirstName,LastName, 薪水,DOB, (性别=='M')? '男' (性别=='F')? '女性'作为性别 来自员工;

这将适用于您的案例


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;
© www.soinside.com 2019 - 2024. All rights reserved.