【问题标题】:MSSQL/Entity Framework OrderBy if exists?MSSQL/实体框架 OrderBy 是否存在?
【发布时间】:2016-05-03 16:24:16
【问题描述】:

想知道我是否可以通过这种语法获得一些帮助?我尝试了各种形式的“Exists”和“IsNull”,但就是无法理解。

我有三张桌子:

Item            Package     ItemsInPackages
-----------     -------     ---------------
ItemID          PackageID   ID
Name            Desc        PackageID
Desc                        ItemID

现在,我想返回所有现有项目的列表...

SELECT * FROM Items

但现在我想对其进行排序,以便可以将 [PackageID]=5 中存在的所有 [Items] 浮动到结果集的顶部。

即伪代码...

ORDER BY (ROW EXIST [ItemsInPackages].PackageID = 5) Something Something DESC?

使用 MSSQL 2008 和实体框架 7。EF 或 TSQL 语法都适合我。

提前致谢!

【问题讨论】:

  • 您是否还希望其他行也被返回?意思是先返回PackageID=5的所有行,然后再返回剩下的行?
  • 正确。希望返回所有行,但将包的所有项目部分放在顶部。
  • 愿意就答案提供任何反馈吗?

标签: sql-server entity-framework tsql sql-server-2008-r2


【解决方案1】:

您可以使用CASE 表达式:

select *
  from Items as I
  order by case
    when exists ( select 42 from ItemsInPackages as IIP where IIP.ItemID = I.ItemID and IIP.PackageID = 5 ) then 0
    else 1 end

【讨论】:

    【解决方案2】:

    试试这样的。未测试

    SELECT * FROM Items
    WHERE [ItemsInPackages].PackageID = 5
    ORDER BY [ItemsInPackages] DESC;
    

    【讨论】:

    • 我很确定 SQL Server 不支持按表排序,无论方向如何。在WHERE 子句中引用一个表而不在SELECTFROM 子句中使用它,并且没有尝试将它与Items 表关联起来,不会很好地工作。
    猜你喜欢
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    相关资源
    最近更新 更多