【问题标题】:SQL How to select first match if key has multiple values [duplicate]如果键具有多个值,SQL如何选择第一个匹配项[重复]
【发布时间】:2016-04-19 01:52:09
【问题描述】:

伙计们,

我有下表...

Code UPC
1111 A
1111 B
1111 C
2222 B
2222 A

我需要返回一个表格,其中每个代码(任何代码)只返回一个 UPC,因此对于下面的表格,结果应该只有 2 行,例如...

Code UPC
1111 A
2222 B

感谢任何指针。

【问题讨论】:

  • 什么是 RDBMS? SQL 服务器? MySQL?甲骨文?还有什么?
  • 小心“第一场比赛”的想法。你如何定义“第一”? 行没有固有顺序。 在您的示例中,您将“2222 B”作为“第一个”匹配项,但它只是“第一个”,因为这是您显示的顺序在列表中。下面的 Siyual 和 Joe Stefanelli 的示例都选择了“按 UPC 订购”定义的第一个,这与您所拥有的不同。如果您想要“第一个”,即“添加行的顺序”,那么您必须有一个时间戳和顺序。

标签: sql sql-server select sql-server-2005 match


【解决方案1】:

您可以利用 Common Table Expression (CTE) 和 row_number 函数对每组代码中的 UPC 值进行编号,调整 ORDER BY 以满足您的最终需求。

WITH cteCodeUPC AS (
    SELECT Code, UPC,
           ROW_NUMBER() OVER(PARTITION BY Code ORDER BY UPC) AS RowNum
        FROM YourTable
)
SELECT Code, UPC
    FROM cteCodeUPC
    WHERE RowNum = 1;

【讨论】:

    【解决方案2】:

    对于 SQL Server,您可以在 CTE 中使用 ROW_NUMBER() 窗口函数:

    ;With Cte As 
    (
        Select  Code, UPC,
                Row_Number() Over (Partition By Code Order By UPC Asc) RN
        From    YourTable
    )
    Select  Code, UPC
    From    Cte
    Where   RN = 1
    

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      相关资源
      最近更新 更多