SQL 在列上查询 ORDER BY,而不是在联接表上的 select 上

SQL Query ORDER BY on column not on select on joined tables

我面临的问题如下,我连接了 2 个表,我想提取 2 列(每列 1 列),但我想在其中一个表上按第三列排序,到目前为止我一直不成功,这是我尝试过的查询,但它不起作用。

SELECT
    [Months].[Month] AS 'Name',
    SUM(ISNULL([Documents].[Balance],0)) AS 'Value'
FROM (
    SELECT 
        [Months].[Month],
        SUM(ISNULL([Documents].[Balance],0)),
        MONTH([Documents].[Date])
    FROM
        [Documents]
    LEFT JOIN [Months] ON
        [Months].[MonthNumber] = MONTH([Documents].[Date])
    GROUP BY
        [Months].[Month], MONTH([Documents].[Date])
    ORDER BY
        MONTH([Documents].[Date]) ASC
)

对这个问题有帮助吗?

您不需要派生的 table / 子查询。

    SELECT 
        [Months].[Month] AS 'Name',
        SUM(ISNULL([Documents].[Balance],0)) AS 'Value',
        MONTH([Documents].[Date]) AS 'Mth'
    FROM
        [Documents]
    LEFT JOIN [Months] ON
        [Months].[MonthNumber] = MONTH([Documents].[Date])
    GROUP BY
        [Months].[Month], MONTH([Documents].[Date])
    ORDER BY
        Mth ASC

如果您只需要名称和值列作为结果,请从 SELECT 中删除 MONTH([Documents].[Date]) 并将 ORDER BY 更改为 ORDER BY MONTH([Documents].[Date])

这里为什么需要子查询?您可以 JOIN 并使用 ORDER BY 子句:

SELECT m.[Month], SUM(ISNULL(d.[Balance], 0))
FROM [Documents] d LEFT JOIN 
     [Months] m 
     ON m.[MonthNumber] = MONTH(d.[Date])
GROUP BY m.[Month], MONTH(d.[Date])
ORDER BY MONTH(d.[Date]);

但是,order by 子句中的列没有出现在 SELECT 语句中,这没有任何意义。

您必须在 select 列表中使用按列排序

SELECT 
        [Months].[Month] AS 'Name',
        SUM(ISNULL([Documents].[Balance],0)) AS 'Value',
        MONTH([Documents].[Date]) AS  dcosdate
    FROM
        [Documents]
    LEFT JOIN [Months] ON
        [Months].[MonthNumber] = MONTH([Documents].[Date])
    GROUP BY
        [Months].[Month], MONTH([Documents].[Date])
    ORDER BY
        MONTH([Documents].[Date])