4

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

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

6 回答 6

5

您可以将内联 C# 表达式用于简单的事情(虽然尚未测试)

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

如果它更复杂,请考虑在 C# 中编写用户定义的运算符。
看看这里的 MSDN 教程

于 2016-05-16T15:15:05.773 回答
3

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

于 2017-02-14T19:57:21.463 回答
2

自 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);
于 2018-08-24T00:12:29.480 回答
1

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

SELECT
    FirstName, LastName,
    Salary, DOB,
    IF(Gender == "Male", "M", "F") AS Gender
FROM Employees
于 2016-07-15T23:19:27.953 回答
1

选择
名字、姓氏、
薪水、出生日期、
(性别 == 'M')?'男性'
(性别 == 'F')?

“女性”作为员工的性别;

这将适用于您的案例

于 2018-08-23T06:08:35.950 回答
0

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

U-SQL 中对应的表达式是。我们必须使用条件表达式 ( ?:)。有关更多信息,您可以参考以下链接:

? 的 C# 表达式:
TSQL 和 USQL 等效项

SELECT
    FirstName, LastName,
    Salary, DOB,
    (Gender == "M") ? "Male" : (Gender == "F") ? "Female" : "Unknown" AS Gender
FROM Employees;
于 2018-09-03T08:56:45.147 回答