不确定是否应在Microsoft SQL Server 2008 R2中使用游标
我这里有个问题。问题是我有一个名为不确定是否应在Microsoft SQL Server 2008 R2中使用游标,sql,sql-server-2008-r2,cursor,Sql,Sql Server 2008 R2,Cursor,我这里有个问题。问题是我有一个名为MOSTEP的表,在这个表中有一个名为MOID的列。我需要做的是检查重复的值,我的意思是,例如,在表中有以下值: 10, 9, 8, 6, 9, 5, 2 10 我需要检查表中MOID的所有值,然后做两件事,条件的细节与此问题无关,因此我将省略它们: 如果该值只出现一次,我将对它们中的每一个进行处理 如果该值出现不止一次,我会对每个值执行其他操作 我知道如何使用 COUNT(MOID) 然而,我不知道如何在同一个查询中检查这一点并使其高效 我在考虑使用两个游
MOSTEP
的表,在这个表中有一个名为MOID
的列。我需要做的是检查重复的值,我的意思是,例如,在表中有以下值:
10, 9, 8, 6, 9, 5, 2 10
我需要检查表中MOID
的所有值,然后做两件事,条件的细节与此问题无关,因此我将省略它们:
COUNT(MOID)
然而,我不知道如何在同一个查询中检查这一点并使其高效
我在考虑使用两个游标,一个用于存储所有重复的值,然后只获取每一行,另一个用于执行相同的操作,但使用非重复的值。但我听说光标并不总是最好的选择
我也在考虑在SELECT
中执行IF
或CASE
条件,但我不确定如何执行
如果有人能帮我,我会非常感激的听起来没有任何理由使用光标。 您可以将
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
演示:听起来没有任何理由为此使用光标。 您可以将
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
演示:听起来没有任何理由为此使用光标。 您可以将
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
演示:听起来没有任何理由为此使用光标。 您可以将
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
演示:光标很少是必要的,而且从来都不是一个好的选择-只有最后的选择,如果没有其他方法有效的话….光标很少是必要的,从来都不是一个好的选择-只有最后的选择,如果没有其他方法有效的话….光标很少是必要的,从来都不是一个好的选择-只有最后的选择,如果没有其他办法,那么诅咒几乎是不必要的,也从来不是一个好的选择——只有最后的办法,如果没有其他办法的话……霍莉天母,你救了我霍莉天母,你救了我霍莉天母,你救了我霍莉天母,你救了我霍莉天母,你救了我霍莉天母,你救了我