【发布时间】:2015-09-04 02:41:43
【问题描述】:
我正在使用以下查询:
SELECT TOP 12
INVENTABLE.ITEMNUMBER,
INVENTABLE.ITEMNAME1,
INVENTABLE.ITEMNAME2,
INVENTABLE.W_TILBUD,
INVENTABLE.COSTPRICE,
INVENTABLE.VENDITEMNUMBER,
INVENTABLE.A_PRODUCENT,
INVENTABLE.GROUP_,
INVENTABLE.A_GROSSISTLAGER,
INVENTABLE.SupplementaryUnits
FROM INVENTRANS
INNER JOIN INVENTABLE ON INVENTABLE.ITEMNUMBER=INVENTRANS.ITEMNUMBER
WHERE INVENTRANS.ACCOUNT='xxx' AND
INVENTABLE.W_VISFORSIDE = 0 AND
INVENTABLE.W_VISWWW = 1 AND
INVENTABLE.BLOCKED = 0
ORDER BY INVENTRANS.ROWNUMBER DESC
此查询从一个表 (INVENTRANS) 中选择最后售出的 12 件商品,并从另一个表 (INVENTABLE) 中获取商品信息。它的工作原理应该是这样,除了我想防止多个相同的项目 (INVENTRANS.ITEMNUMBER) 出现在相同的结果中。
我已尝试四处寻找解决方案并尝试了几个带有 DISTINCT 或 GROUP BY 的示例,但我无法使其工作:/
非常感谢任何帮助! :)
解决方案:
;WITH CTE AS (
SELECT ROW_NUMBER() OVER (PARTITION BY INVENTRANS.ITEMNUMBER
ORDER BY INVENTRANS.ROWNUMBER DESC) AS rn,
INVENTRANS.ITEMNUMBER,
INVENTRANS.ROWNUMBER,
INVENTABLE.ITEMNAME1,
INVENTABLE.ITEMNAME2,
INVENTABLE.W_TILBUD,
INVENTABLE.COSTPRICE,
INVENTABLE.VENDITEMNUMBER,
INVENTABLE.A_PRODUCENT,
INVENTABLE.GROUP_,
INVENTABLE.A_GROSSISTLAGER,
INVENTABLE.SupplementaryUnits
FROM INVENTRANS
INNER JOIN INVENTABLE ON INVENTABLE.ITEMNUMBER=INVENTRANS.ITEMNUMBER
WHERE INVENTRANS.ACCOUNT='xxx' AND
INVENTABLE.W_VISFORSIDE = 0 AND
INVENTABLE.W_VISWWW = 1 AND
INVENTABLE.BLOCKED = 0
)
SELECT TOP 12 *
FROM CTE
WHERE rn = 1
ORDER BY ROWNUMBER DESC
【问题讨论】:
-
如果一个项目编号有多行,那么只选择其中一个,以便所有 12 行都应该有不同的项目编号?那是对的吗?如果是这样,那么您希望在结果集中包含哪一个倍数。
-
您能否向我们展示您的数据示例以及您希望查询返回的内容?通常这比在猜测表架构时尝试逆向工程代码更有帮助。
-
从来没有注意到这里的cmets,抱歉!已找到解决方案,我将使用工作代码编辑我的帖子:)
标签: sql-server select group-by inner-join distinct