case1:
数据:
A
A
A
查询出来是
A
=============
case2:
数据:
A
B
A
查询出来是
A
B
A
怎么用一个sql来实现包括上面两个case的查询呢?先谢谢了...
SELECT DISTINCT * INTO #A FROM A IF @@ROWCOUNT>1 BEGIN SELECT * FROM A END ELSE BEGIN SELECT * FROM #A END
可以把临时表改成表变量,表变量快一点
不太理解你的需求
就是想实现,如果查询出的所有数据都相等时就显示一条,相当于作了一次消除相同数据处理。如果查询出的数据有一条跟其他数据不相等,就显示所有数据,不做任何消除相同数据处理
你是要消除结果重复项?
第一种case的情况下做消除重复数据,第二case下不做任何消除处理
select t1.colunm from
(select colunm , row_number() as RowNum from table ) as t1 left join
(select colunm , row_number() as RowNum + 1 from table ) as t2 on t1.RowNum = t2.RowNum
where t1.colunm != t2.colunm
你试试,大概就是这个思路,应该能实现
明早上班时试试,先谢谢了。
select distinct * from case1 union all select * from case2
大概思路如上,把两次查询组合起来,第一次去重。去重的话,可以考虑用row_number()方式。
这样的操作建议写一个存储过程,或是先在程序里判断好再发出SQL查询
先判断表里的值是否一致,如果是直接取第一行,速度比其他语句快很多,直接select top 1 * from 表
如果不至则直接select * from 表
select column from table group by column having count(*)>1