标识列表中第一个匹配项的SQL

时间:2013-10-07 08:29:01

标签: sql sql-server

使用SQL Server我试图在查询结果中标记第一个匹配项,因此对于这样的结果......

enter image description here

我可以像这样识别出第一个:

enter image description here

这可以做一个案例陈述或类似的吗?非常感谢!

由于

3 个答案:

答案 0 :(得分:2)

使用row_number()应启用此

select
   breakfast
 , case when rn = 1 then 1 else 0 end as first_occur
from (
       select 
         breakfast
       , row_number() over (partition by breakfast order by ID DESC) as rn
       from your_table
     ) as x

但不知道顺序是什么(我假设是ID DESC),表中可能有一个日期时间或其他东西用于此。

答案 1 :(得分:1)

您可以使用带有over子句和排名函数的CTE(SQL 2005及更高版本)执行此操作。

我认为你首先会有一些关于Breakfast想要看到的其他标准,请使用ORDER BY来指定。

RowNumber然后告诉你它发生了多少次。

以下示例供您调整

DECLARE @tbl TABLE (
    Breakfast VARCHAR(10) 
); 

INSERT INTO @tbl VALUES ('Eggs')
INSERT INTO @tbl VALUES ('Fish')
INSERT INTO @tbl VALUES ('Fish')
INSERT INTO @tbl VALUES ('Eggs')
INSERT INTO @tbl VALUES ('Bacon')
INSERT INTO @tbl VALUES ('Bacon')
INSERT INTO @tbl VALUES ('Eggs')
INSERT INTO @tbl VALUES ('Fish')
INSERT INTO @tbl VALUES ('Bacon')

;WITH t AS (
   SELECT *, ROW_NUMBER() OVER (PARTITION BY Breakfast ORDER BY Breakfast) AS RowNumber
   FROM @tbl 
)
SELECT Breakfast, (CASE WHEN RowNumber = 1 THEN 1 ELSE 0 END) As FirstOccurance
FROM t 

答案 2 :(得分:0)

使用SQL Server窗口函数尝试此操作:

SQL Server MSDN documentation