如何逐行判断与上一行值是否相同?

ykdrj 2011-03-29 11:10:03
原表
Name C1 C2 C3 C4 C5 C6 C7 C8
张三 0 0 0 0 0 0 0 0
张三 0 0 0 0 0 0 0 0
张三 0 0 0 0 0 0 0 0
李四 0 0 0 0 0 0 0 0
王五 0 0 0 0 0 0 0 0
王五 0 0 0 0 0 0 0 0
王五 0 0 0 0 0 0 0 0
王五 0 0 0 0 0 0 0 0
王五 0 0 0 0 0 0 0 0
王五 0 0 0 0 0 0 0 0

-----------------------------------------------------------------------------------------
想要得到的结果
Name C1 C2 C3 C4 C5 C6 C7 C8
张三 1 0 0 0 0 0 0 0
张三 0 1 0 0 0 0 0 0
张三 0 0 1 0 0 0 0 0
李四 1 0 0 0 0 0 0 0
王五 1 0 0 0 0 0 0 0
王五 0 1 0 0 0 0 0 0
王五 0 0 1 0 0 0 0 0
王五 0 0 0 1 0 0 0 0
王五 0 0 0 0 1 0 0 0
王五 0 0 0 0 0 1 0 0


规则:
第一个张三,C1=1
第二个张三,C2=1
第三个张三,C3=1
判断是第几个出现的三张,对应的C列值就等于1,其余还是0

因为最多为C8列,所以如果出现9个以上张三,第九个以上的都是0
...全文
200 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ss7536295 2011-10-20
  • 打赏
  • 举报
回复
看看结果是啊
ykdrj 2011-03-31
  • 打赏
  • 举报
回复
非常感谢andy_liucj的帮助,如果方便的话可否解释下这个方法呢,运行起来很成功,可是不明白是什么意思。

如果现在增加一列Flag,最后一个名字显示1,其余其余显示0又要如何操作
例如
Name C1 C2 C3 C4 C5 C6 C7 C8 Flag
张三 1 0 0 0 0 0 0 0 0
张三 0 1 0 0 0 0 0 0 0
张三 0 0 1 0 0 0 0 0 1
李四 1 0 0 0 0 0 0 0 1
王五 1 0 0 0 0 0 0 0 0
王五 0 1 0 0 0 0 0 0 0
王五 0 0 1 0 0 0 0 0 0
王五 0 0 0 1 0 0 0 0 0
王五 0 0 0 0 1 0 0 0 0
王五 0 0 0 0 0 1 0 0 1
andy_liucj 2011-03-29
  • 打赏
  • 举报
回复

SELECT [name],
c1=CASE sn WHEN 1 THEN 1 ELSE 0 end,
c2=CASE sn WHEN 2 THEN 1 ELSE 0 end,
c3=CASE sn WHEN 3 THEN 1 ELSE 0 end,
c4=CASE sn WHEN 4 THEN 1 ELSE 0 end,
c5=CASE sn WHEN 5 THEN 1 ELSE 0 end,
c6=CASE sn WHEN 6 THEN 1 ELSE 0 end,
c7=CASE sn WHEN 7 THEN 1 ELSE 0 end
from (select row_number() over (partition by [Name],c1,c2,c3,c4,c5,c6,c7 order by [Name]) as sn, * from tb) as a

如果超过7行一样的该怎么处理?列会超过7列不?
haitao 2011-03-29
  • 打赏
  • 举报
回复
上一行?按什么规则排序?
可能需要一个id字段

结果 不如改为:
Name C=此时的重复次数+1
张三 1
张三 2
张三 3
李四 1
王五 1
王五 2
王五 3
王五 4
王五 5
王五 6
这样,重复次数再大也不怕了
叶子 2011-03-29
  • 打赏
  • 举报
回复
如果个数超出列数怎么处理?例如有12个张三呢?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧