【问题标题】:Trying to Use ORDER BY on a LEFT JOIN Query尝试在 LEFT JOIN 查询上使用 ORDER BY
【发布时间】:2016-12-13 18:24:45
【问题描述】:

我正在尝试使用左连接和 concat 2 列名称,以便它们一起显示在下拉列表中。这是我目前的查询。

SELECT DISTINCT CONCAT(CAST(Index.MR_ID AS INT),' - ', Master.MR_Name) AS MR_ID
FROM Index
LEFT JOIN Master
ON Master.MR_ID=Index.MR_ID

我想通过索引表中的 MR_ID 对其进行排序,但是每当我尝试向查询添加 ORDER BY 时,它对我不起作用。有人可以帮我吗?

【问题讨论】:

  • 我们可以....如果您显示您尝试使用的 ORDER BY 子句
  • 首先你在上面的SQL中的几个地方都有Index.MR_Id,但是Index不是From子句中提到的表。它应该是SINdex 吗?还是应该在 From 子句中使用 Index?这是您的订购者的问题吗?

标签: sql-server group-by left-join sql-order-by


【解决方案1】:
WITH cte AS (
SELECT DISTINCT CONCAT(CAST(Index.MR_ID AS INT),' - ', Master.MR_Name) AS MR_ID
FROM [Index]
LEFT JOIN Master
ON Master.MR_ID=Index.MR_ID
)
SELECT *
FROM
    cte
ORDER BY
    MR_ID;

以上是如果你想按你得到的最后一列排序。

如果您想在 Index 或 Master 表中按 MR_ID 排序,这是不可能的,因为您使用的是 DISTINCT 运算符,这意味着它未由最终查询确定。在这种情况下,您将需要以下内容

WITH cte AS (
SELECT DISTINCT CONCAT(CAST(Index.MR_ID AS INT),' - ', Master.MR_Name) AS MR_ID
    , Index.MR_ID AS sort_column
FROM [Index]
LEFT JOIN Master
ON Master.MR_ID=Index.MR_ID
)
SELECT MR_ID
FROM
    cte
ORDER BY
    sort_column;

【讨论】:

  • 这就是我要找的!谢谢!
【解决方案2】:

Positive 先生打败了我。由于您使用的是左连接,因此我也会为空值做准备。

select distinct concat(cast(index.mr_id as int),' - ', isnull(master.mr_name,'') as mr_id
  from sindex
    left join master on master.mr_id=index.mr_id
  order by concat(cast(index.mr_id as int),' - ', isnull(master.mr_name,'')

【讨论】:

    【解决方案3】:

    我认为你在这之后

    SELECT DISTINCT CONCAT(CAST(Index.MR_ID AS INT),' - ', IsNull(Master.MR_Name, '')) AS MR_ID
    FROM SIndex
    LEFT JOIN Master ON Master.MR_ID=SIndex.MR_ID
    Order by CONCAT(CAST(Index.MR_ID AS INT),' - ', IsNull(Master.MR_Name, '')) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 2013-03-01
      • 1970-01-01
      相关资源
      最近更新 更多