Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL多事例语句_Sql - Fatal编程技术网

SQL多事例语句

SQL多事例语句,sql,Sql,我怎样才能纠正这个错误?我得到一个错误,说: 关键字“DESC”附近的语法不正确。 我能不能有两个案例陈述?如果没有,如何将order by字段的名称和方向作为参数传递 谢谢 第一个问题解决后,另一个问题浮出水面 如果我包含一个没有字符串数据类型的字段,If将抛出一个错误。 例如: SELECT * FROM Companies Order By CASE @Direction WHEN 'DESC' THEN CASE @OrderByField WHEN 'Com

我怎样才能纠正这个错误?我得到一个错误,说: 关键字“DESC”附近的语法不正确。

我能不能有两个案例陈述?如果没有,如何将order by字段的名称和方向作为参数传递

谢谢

第一个问题解决后,另一个问题浮出水面

如果我包含一个没有字符串数据类型的字段,If将抛出一个错误。 例如:

SELECT *
FROM Companies
Order By
  CASE @Direction WHEN 'DESC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
        WHEN 'Score' THEN Score

    END
  END DESC,
  CASE @Direction WHEN 'ASC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
        WHEN 'Score' THEN Score
    END
  END ASC
@OrderByField是nvarchar(50)的类型 假设Score的数据类型为float

上面抛出了一个类似下面的错误,即使我没有尝试按分数字段排序将数据类型nvarchar转换为float时出错。

类似地,包含createddate会引发错误:从字符串转换日期和/或时间时转换失败。


如果有人能帮忙,我们将不胜感激

因为
ASC
DESC
是关键字,所以不能将它们作为
案例的返回值

您可以制作两个案例,一个用于
ASC
,另一个用于
DESC

SELECT *
FROM Companies
Order By 
  CASE
    WHEN @OrderByField = 'CompanyName' AND @Direction = 'ASC' THEN CompanyName
    WHEN @OrderByField = 'CreatedDate' AND @Direction = 'ASC' THEN CreatedDate
  END ASC,
  CASE
    WHEN @OrderByField = 'CompanyName' AND @Direction = 'DESC' THEN CompanyName
    WHEN @OrderByField = 'CreatedDate' AND @Direction = 'DESC' THEN CreatedDate
  END DESC

请注意,一个案例中的所有值都必须具有相同的数据类型,因此您可能需要一对案例作为字符串,一对案例作为日期。

因为
ASC
DESC
是关键字,您不能将它们作为
案例的返回值

您可以制作两个案例,一个用于
ASC
,另一个用于
DESC

SELECT *
FROM Companies
Order By 
  CASE
    WHEN @OrderByField = 'CompanyName' AND @Direction = 'ASC' THEN CompanyName
    WHEN @OrderByField = 'CreatedDate' AND @Direction = 'ASC' THEN CreatedDate
  END ASC,
  CASE
    WHEN @OrderByField = 'CompanyName' AND @Direction = 'DESC' THEN CompanyName
    WHEN @OrderByField = 'CreatedDate' AND @Direction = 'DESC' THEN CreatedDate
  END DESC

请注意,一个案例中的所有值都必须具有相同的数据类型,因此您可能需要一对案例作为字符串,一对案例作为日期。

因为
ASC
DESC
是关键字,您不能将它们作为
案例的返回值

您可以制作两个案例,一个用于
ASC
,另一个用于
DESC

SELECT *
FROM Companies
Order By 
  CASE
    WHEN @OrderByField = 'CompanyName' AND @Direction = 'ASC' THEN CompanyName
    WHEN @OrderByField = 'CreatedDate' AND @Direction = 'ASC' THEN CreatedDate
  END ASC,
  CASE
    WHEN @OrderByField = 'CompanyName' AND @Direction = 'DESC' THEN CompanyName
    WHEN @OrderByField = 'CreatedDate' AND @Direction = 'DESC' THEN CreatedDate
  END DESC

请注意,一个案例中的所有值都必须具有相同的数据类型,因此您可能需要一对案例作为字符串,一对案例作为日期。

因为
ASC
DESC
是关键字,您不能将它们作为
案例的返回值

您可以制作两个案例,一个用于
ASC
,另一个用于
DESC

SELECT *
FROM Companies
Order By 
  CASE
    WHEN @OrderByField = 'CompanyName' AND @Direction = 'ASC' THEN CompanyName
    WHEN @OrderByField = 'CreatedDate' AND @Direction = 'ASC' THEN CreatedDate
  END ASC,
  CASE
    WHEN @OrderByField = 'CompanyName' AND @Direction = 'DESC' THEN CompanyName
    WHEN @OrderByField = 'CreatedDate' AND @Direction = 'DESC' THEN CreatedDate
  END DESC

请注意,一个case中的所有值都必须具有相同的数据类型,因此您可能需要一对case作为字符串,一对case作为日期。

您不能从case语句返回关键字

但您可以通过两种方式进行排序来实现所需的功能,但返回一个常量表达式,表示您不需要的顺序:

SELECT *
FROM Companies
Order By
  CASE @Direction WHEN 'DESC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
    END
  END DESC,
  CASE @Direction WHEN 'ASC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
    END
  END ASC

不匹配的案例将返回
null
,因此出于排序目的将被忽略。

您不能从案例语句返回关键字

但您可以通过两种方式进行排序来实现所需的功能,但返回一个常量表达式,表示您不需要的顺序:

SELECT *
FROM Companies
Order By
  CASE @Direction WHEN 'DESC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
    END
  END DESC,
  CASE @Direction WHEN 'ASC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
    END
  END ASC

不匹配的案例将返回
null
,因此出于排序目的将被忽略。

您不能从案例语句返回关键字

但您可以通过两种方式进行排序来实现所需的功能,但返回一个常量表达式,表示您不需要的顺序:

SELECT *
FROM Companies
Order By
  CASE @Direction WHEN 'DESC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
    END
  END DESC,
  CASE @Direction WHEN 'ASC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
    END
  END ASC

不匹配的案例将返回
null
,因此出于排序目的将被忽略。

您不能从案例语句返回关键字

但您可以通过两种方式进行排序来实现所需的功能,但返回一个常量表达式,表示您不需要的顺序:

SELECT *
FROM Companies
Order By
  CASE @Direction WHEN 'DESC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
    END
  END DESC,
  CASE @Direction WHEN 'ASC' THEN
    CASE @OrderByField
        WHEN 'CompanyName' THEN CompanyName
        WHEN 'CreatedDate' THEN CreatedDate
    END
  END ASC


不匹配的案例将返回
null
,因此出于订购目的将被忽略。

如果您也能找到关于此的帖子,我将不胜感激!请参见第一个链接上LarsW的回答,或第二个链接上gbn回答的
case
部分;这些似乎正是你想要的?谢谢!这就解决了我的问题+1如果您能找到关于此的帖子,我将不胜感激!请参见第一个链接上LarsW的回答,或第二个链接上gbn回答的
case
部分;这些似乎正是你想要的?谢谢!这就解决了我的问题+1如果您能找到关于此的帖子,我将不胜感激!请参见第一个链接上LarsW的回答,或第二个链接上gbn回答的
case
部分;这些似乎正是你想要的?谢谢!这就解决了我的问题+1如果您能找到关于此的帖子,我将不胜感激!请参见第一个链接上LarsW的回答,或第二个链接上gbn回答的
case
部分;这些似乎正是你想要的?谢谢!这就解决了我的问题+1非常优雅!这正是我想要的。两个嵌套的案例陈述是我发布问题后的方法。你先到的!如果您能帮助解决上述问题,我们将不胜感激。谢谢波希米亚人!您需要将
CreatedDate
转换为字符类型,但不同数据库的语法不同:您使用的是什么数据库?我使用的是sql server 2013非常优雅!这正是我想要的。两个嵌套的案例陈述是我发布问题后的方法。你先到的!如果您能帮助解决上述问题,我们将不胜感激。谢谢波希米亚人!您需要将
CreatedDate
转换为字符类型,但不同数据库的语法不同:您使用的是什么数据库?我使用的是sql server 2013非常优雅!这正是我想要的。两个嵌套的案例陈述是我发布问题后的方法。你先到的!如果您能帮助解决上述问题,我们将不胜感激。谢谢波希米亚人!您需要将
CreatedDate
转换为字符类型,但不同数据库的语法不同:您使用的是什么数据库?我使用的是sql server 2013非常优雅!这正是我想要的。两个嵌套的案例陈述是我发布问题后的方法。你先到的!如果您能帮助解决上述问题,我们将不胜感激。谢谢波希米亚人!您需要将
CreatedDate
转换为字符类型,但不同数据库的语法不同:您使用的是什么数据库?我使用的是sql server 2013,很抱歉没有看到下面的评论。谢谢你预测我会遇到的问题