日期:2014-05-19  浏览次数:20550 次

查找不同值
A   B   C   D   ....   这些不定字段数的视图有以下值
1   1   1   1   ....--   不合法
1   1   3   2   ....--   不合法
1   2   3   4   ....--   这个合法
3   2   3   3   ....--   不合法
4   3   2   2   ....--   不合法

如何找出A   B   C   D   ....每个字段没有重复值的记录
就象上面数字中只有
1   2   3   4   ....--   这个合法


------解决方案--------------------
select * from csdn where (a <> b) and(a <> c) and(a <> d) and(b <> c) and (b <> d) and (c <> d)
------解决方案--------------------
--一种方法:

create table #t(A int,B int,C int,D int)

insert into #t
select 1,1,1,1 union all
select 1,1,3,2 union all
select 1,2,3,4 union all
select 3,2,3,3 union all
select 4,3,2,2

select *
from #t
where charindex( ', ' + cast(a as varchar(100)) + ', ', ', ' + cast(b as varchar(100)) + ', ' + cast(c as varchar(100)) + ', ' + cast(d as varchar(100)) + ', ')=0
and charindex( ', ' + cast(b as varchar(100)) + ', ', ', ' + cast(a as varchar(100)) + ', ' + cast(c as varchar(100)) + ', ' + cast(d as varchar(100)) + ', ')=0
and charindex( ', ' + cast(c as varchar(100)) + ', ', ', ' + cast(a as varchar(100)) + ', ' + cast(b as varchar(100)) + ', ' + cast(d as varchar(100)) + ', ')=0
and charindex( ', ' + cast(d as varchar(100)) + ', ', ', ' + cast(a as varchar(100)) + ', ' + cast(b as varchar(100)) + ', ' + cast(c as varchar(100)) + ', ')=0


drop table #t


--另一种方法,写一个函数,把当前行的各字段转换为一个临时表,分组检查是否有多于1条的。
--在SQL 中调用这个函数。
------解决方案--------------------
--一楼这种方法更简单

select *
from #t
where a <> b and a <> c and a <> d and b <> c and b <> d and c <> d

------解决方案--------------------
呵呵。
------解决方案--------------------
一楼的方法不错
------解决方案--------------------
15条对吗
错了别笑
------解决方案--------------------
如果你一定要在sql中实现这种功能,最好写函数来处理
在应用程序中用ADO控件应该会更好些
------解决方案--------------------
应该是9吧,我数了三遍都是9。

楼上的朋友有人好像跟你重名啊,都叫流氓……