Sql server 有没有一种方法可以循环记录集并识别不同的值?
我有一个MS SQL存储过程,它使用游标循环select语句的记录。当我循环并读取每条记录时,它可能是3,然后是3,然后是3,也可能是3,然后是4,然后是5,然后是3。它可以是一张唱片,也可以是多张唱片 我需要知道的是,所有的价值观是相同的还是不同的?我不在乎它们是什么,只要它们相同或不同。如果我在客户端代码中这样做的话,我会使用一个列表,看看这个值是否在列表中,然后当我完成时,我会计算这些值,如果一个,那么相同,如果超过1,那么不同Sql server 有没有一种方法可以循环记录集并识别不同的值?,sql-server,stored-procedures,cursor,Sql Server,Stored Procedures,Cursor,我有一个MS SQL存储过程,它使用游标循环select语句的记录。当我循环并读取每条记录时,它可能是3,然后是3,然后是3,也可能是3,然后是4,然后是5,然后是3。它可以是一张唱片,也可以是多张唱片 我需要知道的是,所有的价值观是相同的还是不同的?我不在乎它们是什么,只要它们相同或不同。如果我在客户端代码中这样做的话,我会使用一个列表,看看这个值是否在列表中,然后当我完成时,我会计算这些值,如果一个,那么相同,如果超过1,那么不同 DECLARE TC CURSOR LOCAL
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
如果它们相同,则我将以一种方式更新记录,如果它们不同,则以另一种方式更新状态记录
谢谢像这样的东西也许不涉及光标
select PubId, count(distinct ProgId)
from tblPublications
group by PubId
像这样的东西可能不涉及光标
select PubId, count(distinct ProgId)
from tblPublications
group by PubId
您可以使用countdistinct col获取列的不同值的数量,并根据值是1还是更多,使用case表达式返回值
select
PublicationId
, PublicationType = case
when count(distinct ProgramId) > 1
then 'inter'
else 'intra'
end
from tblPublications
where PublicationId = 12345
group by PublicationId
您可以使用countdistinct col获取列的不同值的数量,并根据值是1还是更多,使用case表达式返回值
select
PublicationId
, PublicationType = case
when count(distinct ProgramId) > 1
then 'inter'
else 'intra'
end
from tblPublications
where PublicationId = 12345
group by PublicationId
您可以比较组中ProgramID的最小值和最大值。 如果所有值相同,则最大值将与最小值相同
;with tblPublications(ProgramID,ID)AS(
select 'a',1 union
select 'b',1 union
select 'c',2 union
select 'c',2
您可以比较组中ProgramID的最小值和最大值。 如果所有值相同,则最大值将与最小值相同
;with tblPublications(ProgramID,ID)AS(
select 'a',1 union
select 'b',1 union
select 'c',2 union
select 'c',2
也许有一种更好的方法可以不用循环或游标来完成您正在做的事情。您是否可以进一步阐述您的问题?我们不希望在sql中计算值时使用循环。我们使用聚合。比如countYourValue。给我们一些关于数据和期望输出的实际细节,我们可以提供帮助。这是一个很好的起点。我有一份属于不同部门作者的出版物清单。如果所有作者来自同一部门,则该出版物被视为部门内出版物。如果多个部门参与了该出版物的写作,则该出版物被视为部门间出版物。我的记录集包含基于PublicationID的部门/programid,因此-选择programid,其中PublicationID=12345-现在我需要查看programid是否相同或不同。在不使用循环或游标的情况下,这可能是更好的方法。您是否可以进一步阐述您的问题?我们不希望在sql中计算值时使用循环。我们使用聚合。比如countYourValue。给我们一些关于数据和期望输出的实际细节,我们可以提供帮助。这是一个很好的起点。我有一份属于不同部门作者的出版物清单。如果所有作者来自同一部门,则该出版物被视为部门内出版物。如果多个部门参与了该出版物的写作,则该出版物被视为部门间出版物。我的记录集包含基于PublicationID的部门/程序ID,因此-选择PublicationID=12345的程序ID-现在我需要查看程序ID是否相同或不同-您和Giorgos都很棒-很难调用正确的answer@user1314159很乐意帮忙!谢谢你的回复,保重!你和Giorgos都很棒-很难说是正确的answer@user1314159很乐意帮忙!谢谢你的回复,保重!