在MS Access 2010中,我有以下代码:
SELECT
[Teile-LF-Beziehungen].Lieferant,
COUNT([Teile-LF-Beziehungen].Lieferant) AS [Anz Teile],
First([Teile-LF-Beziehungen].Name) AS Name
FROM
[Teile-LF-Beziehungen]
GROUP BY
[Teile-LF-Beziehungen].Lieferant
ORDER BY
COUNT([Teile-LF-Beziehungen].Lieferant) DESC;我想把这个查询放到Server中,因为MS应该只是前端。
但是在Server中,我不能在视图中使用ORDER。但是为什么呢?我不明白。我想在Server中使用的代码:
SELECT
[Lieferant],
COUNT([Lieferant]) AS [Anz Teile],
MIN([Name]) AS [Name]
FROM
[dbo].[VIEW_Teile-LF-Beziehungen]
GROUP BY
[Lieferant]
ORDER BY
COUNT([Lieferant]) DESC;我知道这不管用。但是,是否有任何方法来产生对Server查询(视图)的MS访问查询1:1?
发布于 2016-08-18 13:22:20
只有最外层的select才能使用order (但您可以声明一个TOP 100 percent来欺骗它)。因此,这是完全可以的,在视图不允许这样。
许多人认为,表有某种隐含的顺序(正如您看到的结果排序),但这是随机的。下一个电话可能会导致一个不同的排序。
还有一种将ROW_NUMBER与OVER(ORDER BY)结合使用的方法。结果按此顺序传递,只要订单是按唯一值排序,订单就会得到保证。
编辑
抱歉我的第一次尝试是想快点。由于分组,不允许使用ROW_NUMBER。
这应该是可行的:
SELECT tbl.Lieferant
,tbl.[Anz Teile]
,tbl.Name
,ROW_NUMBER() OVER(ORDER BY tbl.[Anz Teile] DESC) AS Sort
FROM
(
SELECT [Lieferant]
,COUNT([Lieferant]) AS [Anz Teile]
,MIN([Name]) AS [Name]
FROM [dbo].[VIEW_Teile-LF-Beziehungen]
GROUP BY [Lieferant]
) AS tbl;EDIT2
这个SELECT可以放在中a VIEW中,只需将CREATE VIEW YourViewName AS放在SELECT之前并执行。在此之后,您将能够执行一个SELECT * FROM YourViewName来获得一个排序列表。
但
正如许多地方所述:无论如何,最好的是最外层的ORDER BY!
发布于 2016-08-18 13:19:40
ORDER BY在视图中不工作。如果在调用order by时不包括View,server可以自由返回他想要的行。
所以你需要
SELECT *
FROM yourView
ORDER BY yourField编辑:我是说如果你的观点是
CREATE VIEW yourView AS
SELECT
[Lieferant],
COUNT([Lieferant]) AS [Anz Teile],
MIN([Name]) AS [Name]
FROM
[dbo].[VIEW_Teile-LF-Beziehungen]
GROUP BY
[Lieferant];然后你就这样调用你的视图
SELECT *
FROM yourView
ORDER BY [Anz Teile]https://stackoverflow.com/questions/39019248
复制相似问题