特定列的 DISTINCT
给定一个从产品中检索多个列的查询,例如 ID、电子邮件、产品名称和产品型号表,如何修改它以仅显示唯一的电子邮件值?
为了解决这个问题,SQL Server 2005 及更高版本提供了解决方案:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products ) a WHERE rn = 1
此查询使用 ROW_NUMBER() 函数为每个电子邮件分区中的每一行分配一个行号,按 ID 的降序排列。然后,rn 列标识最终结果中应包含哪一行,因为只有 rn 等于 1 的行才会被选择。
为了进一步细化查询,可以添加 WHERE 子句来过滤基于的行根据具体标准。例如,仅包含具有特定 ProductModel 且 ProductName 包含特定子字符串的行:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products WHERE ProductModel = 2 AND ProductName LIKE 'CYBER%' ) a WHERE rn = 1
以上是如何从多列 SQL 查询中仅检索唯一的电子邮件地址?的详细内容。更多信息请关注PHP中文网其他相关文章!