我有一个MS SQL存储过程,它使用游标循环select语句的记录。当我循环并读取每条记录时,它可以是3然后是3然后是3或者它可以是3然后是4然后是5然后3.它可以是一条记录或多条记录。
我需要知道的是,所有的值是相同还是不同?我不在乎它们是什么,只要它们是相同或不同的。如果我使用客户端代码执行此操作,我会使用一个列表,看看该值是否在列表中,然后当我完成时,我会计算值,如果一个值相同,如果大于1然后不同。
DECLARE TC CURSOR LOCAL
FOR SELECT ProgramID FROM tblPublications
OPEN TC
FETCH NEXT FROM TC INTO @ProgramID
WHILE @@FETCH_STATUS = 0
BEGIN
Print @ProgramID
--Same or Different then the last one???
FETCH NEXT FROM TC2 INTO @ProgramID
END
CLOSE TC
DEALLOCATE TC
END
如果它们是相同的,那么我将以一种方式更新记录,如果它们不同,则以另一种方式更新状态记录。
谢谢
答案 0 :(得分:2)
这样的事情(不涉及光标)也许?
select PubId, count(distinct ProgId)
from tblPublications
group by PubId
答案 1 :(得分:2)
您可以使用count(distinct col)
获取列的不同值的数量,并使用case
表达式返回值,具体取决于它是否为1。
select
PublicationId
, PublicationType = case
when count(distinct ProgramId) > 1
then 'inter'
else 'intra'
end
from tblPublications
where PublicationId = 12345
group by PublicationId
答案 2 :(得分:0)
您可以比较组中ProgramID的最小值和最大值。 如果所有值都相同,则最大值将与最小值相同。
;with tblPublications(ProgramID,ID)AS(
select 'a',1 union
select 'b',1 union
select 'c',2 union
select 'c',2
)
select case when ISNULL(max(ProgramID),'')=ISNULL(min(ProgramID),'') then 'Same' else 'Different' end
from tblPublications
group by ID
(No column name) 1 Different 2 Same