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])
我面临的问题如下,我连接了 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])