求SQL语言,能否查询出在 A类或B类或C类同时存在的编码? (重复次数>2)(50)

  • 主题发起人 主题发起人 kuaishang
  • 开始时间 开始时间
K

kuaishang

Unregistered / Unconfirmed
GUEST, unregistred user!
编码 类别a0001 A类 b0002 A类 c0003 A类 a0004 A类 d0005 A类 a0006 A类 a0007 A类 a0008 B类 a0009 B类 a0010 B类 a0011 B类 a0012 B类 a0013 B类 a0006 C类a0007 C类a0008 C类 a0009 C类 查询结果: a0007 A类 C类a0008 B类 C类a0009 B类 C类
 
存在任意2个不同类别:select a.*from table1, (Select 编码, max(case when 类别='a' then 1 else 0 end) a, max(case when 类别='a' then 1 else 0 end) b, max(case when 类别='a' then 1 else 0 end) c from table1 group by 编码 ) awhere a.a+a.b+a.c>=2 and a.编码=table1.编码
 
稍微有些问题,修正后:select a.*from table1, (Select 编码, max(case when 类别='a' then 1 else 0 end) a, max(case when 类别='b' then 1 else 0 end) b, max(case when 类别='c' then 1 else 0 end) c from table1 group by 编码 ) awhere a.a+a.b+a.c>=2 and a.编码=table1.编码
 
呵呵,不好意思,低级错误。
 
执行有语法错误,提示运算符a错误
 
--最简单的--select * from Table1 where 编码 in (select 编码 from TABLE1 group by 编码 having count(*)>=2)
 
楼上也是一个好方法,只要不出现下面数据就可以a0001 A类 a0001 A类 ...................==============================select a.*from table1, (Select 编码, max(case when 类别='a' then 1 else 0 end) a, max(case when 类别='b' then 1 else 0 end) b, max(case when 类别='c' then 1 else 0 end) c from table1 group by 编码 ) as a ---加aswhere a.a+a.b+a.c>=2 and a.编码=table1.编码
 
表名T1,字段:Num自增字段,Code(编码),Title(类别),在查询分析器里执行CREATE FUNCTION dbo.JoinSTR(@Code nvarchar(10))RETURNS VARCHAR(1000)ASBEGIN DECLARE @s VARCHAR(1000) SELECT @s=ISNULL(@s+' ','') + Title FROM t1 WHERE Code = @Code RETURN @sENDGOselect distinct Code,dbo.JoinSTR(Code) from t1 where code in (select code from t1 group by code having count(*)=2) Drop Function dbo.JoinSTR
 
djrj,查询结果a0006 A类 a0007 A类 a0008 B类 a0009 B类 a0006 C类 a0007 C类 a0008 C类 a0009 C类
 
abin30 znxia 查询结果是空
 
wangdonghai,结果a0006 A类 C类 a0007 A类 C类 a0008 B类 C类 a0009 B类 C类 谢谢大家对我的帮忙
 
接受答案了.
 
要把A类,B类显示在同一行,要对结果再用游标进行合并了--读取数据,放入临时表#tempselect 编码,类别 into #temp from Table1 where 编码 in (select 编码 from TABLE1 group by 编码 having count(*)>=2)--构造临时表#result,类别字段这里要变大,因为是很多加在同一行的,select distinct 编码,类别=convert(nvarchar(2000),null) into #result from #temp order by 编码 ASC--设为空,为了后面不用isnull()...update #result set 类别=''declare @NumberValue nvarchar(50),@TypeValue nvarchar(50)declare Number_Cursor cursor forselect 编号, 类别 from #tempopen Number_Cursorfetch next from Number_Cursor into @NumberValue, @TypeValuewhile @@FETCH_STATUS = 0begin update #result set 类别=类别+' '+@TypeValue where 编号=@NumberValue fetch next from Number_Cursor into @NumberValue, @TypeValueendclose Number_Cursordeallocate Number_Cursor--去掉前置空格update #result set 类别=ltrim(类别)--输出结果select * from result--删除临时表drop table #tempdrop table #result
 
后退
顶部