【发布时间】:2019-01-09 17:20:01
【问题描述】:
已编写包含重复项的存储过程。 ROW_NUMBER 已尝试但没有用。 DISTINCT 已工作,但无法检索所需的大量记录(约 700,000 条)。还有另一种使用 RANK 或 GROUP BY 删除重复项的方法吗?
我使用了 DISTINCT,但它没有检索到足够的记录。我没有成功使用 GROUP BY。
我曾尝试使用 ROW NUMBER,但这也不起作用(您可以看到它被注释掉的位置)。
CREATE PROCEDURE [report].[get_foodDetails]
@foodgroup_id INT,
@shop_id INT = 0,
@product_id INT = 0,
@maxrows INT = 600,
@expiry INT = 1,
@productactive INT = 1,
@expiryPeriod DATETIME = '9999-12-31 23:59:59'
AS
IF (@expiryPeriod >= '9999-12-31')
BEGIN
SET @expiryPeriod = GETDATE()
END
SELECT
-- dp.RowNumber
ISNULL([FoodType], '') AS [Foodtype],
ISNULL([FoodColour], '') AS [FoodColour],
ISNULL([FoodBarcode], '') AS [FoodBarcode],
ISNULL([FoodArticleNum], 0) AS [FoodArticleNum],
ISNULL([FoodShelfLife, '9999-21-31') AS [FoodShelfLIFe]
INTO
#devfood
FROM
report.[GetOrderList] (@foodgroup_id, @product_id, @productactive, @expiry, @expiryPeriod, @shop_id, @maxrows ) dp
INNER JOIN
food_group fg ON fg.food_group_id = it.item_FK_item_group_id
SELECT TOP(@maxrows) *
FROM #devfood
ORDER BY [device_packet_created_date]
END
检索到大约 700,000 条记录。尽管有重复,但目前已实现。使用 DISTINCT 时只检索到 20,000 个(但没有重复)。
【问题讨论】:
-
我不明白
select distinct的问题。或许你可以用一些测试数据来解释一下? -
它可以工作,但只能检索 20,000 条记录。我需要 700,000
-
有多少“不同的”记录?可能有 680,000 条重复记录吗? DISTINCT 只会返回您选择的字段的每个实例,如果有没有 DISTINCT 的重复行,则 DISTINCT 将全部抑制
-
DISTINCT 不会排除任何实际上唯一的行,除非您没有选择使该行唯一的列。您要返回所有列吗?
-
如果您想证明这不起作用,我建议您创建一个小表,其中包含少数行来演示您的问题,并将结果包含在您的问题中。会让其他人很容易调试你正在做的事情。这里不清楚。
标签: sql sql-server tsql sql-server-2012