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