不确定我是否应该在Microsoft SQL Server 2008 R2中使用游标

时间:2014-04-14 17:39:46

标签: sql sql-server-2008-r2 cursor

我这里有问题。问题是我有一个名为MOSTEP的表,在此表中有一个名为MOID的列。我需要做的是检查重复值,我的意思是,例如,在表中有这些值:

10, 9, 8, 6, 9, 5, 2 10

我需要检查表格中MOID的所有值,然后做两件事情,条件的细节与这些问题无关,所以我省略了它们:

  1. 如果该值只出现一次,我会对每个值执行一些操作。
  2. 如果该值出现多次,我会对每个值执行其他操作。
  3. 我知道如何使用

    检查重复和不重复的值
    COUNT(MOID)
    

    但是,我不知道如何在同一个查询中检查这一点并使其有效。

    我正在考虑使用两个游标,一个存储所有重复的值,然后只获取每一行,另一个执行相同的操作但使用非重复的值。但我听说游标并不总是最好的选择

    我还考虑在IF内执行CASESELECT条件,但我不确定如何做到这一点。

    如果有人可以帮助我,我会非常感激

1 个答案:

答案 0 :(得分:3)

听起来没有任何理由为此使用光标。 您可以有效地使用COUNT() OVER()CASE

;WITH cte AS (SELECT *,COUNT(MOID) OVER(PARTITION BY MOID) MOID_CT
              FROM MOSTEP)
SELECT MOID
      ,CASE WHEN MOID_CT = 1 THEN 'Something' ELSE 'SomethingElse' END
FROM cte

演示:SQL Fiddle