帮忙写一个简单的查询,布尔表达式有点乱。

zengjd 2010-08-03 10:32:33
表结构如下:
id, XX1, XX2, XX3 ,A ,A1 , B , B1 , C , C1 , D , D1

其中A ,A1 算是逻辑上的一组。B,B1,C,C1,D,D1同理。 都是字符串类型。
我现在要求出这样的结果。
A A1 ,B B1,C C1,D D1 这4组完全不同的记录。
这样的查询该怎么写?

...全文
94 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hokor 2010-08-03
  • 打赏
  • 举报
回复
;with tb AS (
select 1 id, 1 A, 1A1, 2 B, 2 B1, 3 C, 3 C1,4 D,4 D1
UNION ALL select 2 id, 1 A, 1A1, 1 B, 1 B1, 3 C, 3 C1,4 D,4 D1
UNION ALL select 3 id, 1 A, 1A1, 2 B, 2 B1, 1 C, 1 C1,4 D,4 D1
UNION ALL select 4 id, 1 A, 1A1, 2 B, 2 B1, 3 C, 3 C1,1 D,1 D1
UNION ALL select 5 id, 1 A, 1A1, 2 B, 2 B1, 2 C, 2 C1,4 D,4 D1
UNION ALL select 6 id, 1 A, 1A1, 2 B, 2 B1, 3 C, 3 C1,3 D,3 D1)
--方法1
Select * from tb where not ( A+A1=B+B1 or A+A1 =C+C1 or A+A1 =D+D1 or B+B1 =C+C1 or B+B1 =D+D1 or C+C1=D+D1)
--方法2
SELECT * FROM TB WHERE ID IN(
SELECT id FROM (
select id,A+A1 AA from tb
UNION ALL
select id,B+B1 from tb
UNION ALL
select id,C+C1 from tb
UNION ALL
select id,D+D1 from tb ) tb
group by id having(count(DISTINCT AA)>=4))
hokor 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zengjd 的回复:]
在说明一下:假如有4个字段。A B C D,想求出 4个字段完全不同的记录。
可能这么写

Select * from table1 where not ( A=B or A =C or A =D or B=C or B=D or C=D)
现在呢,有增加了4个字段。 A1,B1,C1,D1
A A1作为逻辑上的一组,B C D 同理。

想求出4组字段完全不同的记录,怎么写呢?……
[/Quote]
Select * from tb where not ( A+A1=B+B1 or A+A1 =C+C1 or A+A1 =D+D1 or B+B1 =C+C1 or B+B1 =D+D1 or C+C1=D+D1)
zengjd 2010-08-03
  • 打赏
  • 举报
回复
在说明一下:假如有4个字段。A B C D,想求出 4个字段完全不同的记录。
可能这么写

Select * from table1 where not ( A=B or A =C or A =D or B=C or B=D or C=D)
现在呢,有增加了4个字段。 A1,B1,C1,D1
A A1作为逻辑上的一组,B C D 同理。

想求出4组字段完全不同的记录,怎么写呢?
hokor 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hokor 的回复:]
SQL code
select * from tb a join (
select A+A1 A2 ,B+B1 B2 ,C+C1 C2 ,D+D1 D2
from tb
group by A+A1,B+B1,C+C1,D+D1 ) b
on a.A+A1 = A2 AND a.B+B1 = b.B2 AND a.C+C1 = c.C2 AND a.D+D1 = b.D2
[/Quote]
[Quote=引用 5 楼 hokor 的回复:]
SQL code
--如果id 是主键的话
select * from tb a join (
select A+A1 A2 ,B+B1 B2 ,C+C1 C2 ,D+D1 D2,max(id)
from tb
group by A+A1,B+B1,C+C1,D+D1 ) b
on a.id = b.id
[/Quote]

跑题了,这个不行。。。
aaron_gl 2010-08-03
  • 打赏
  • 举报
回复

--没有试过,不知道可不可以
select * from table where a+a1<>b+b1<>c+c1<>d+d1

zengjd 2010-08-03
  • 打赏
  • 举报
回复
在说明一下:假如有4个字段。A B C D,想求出 4个字段完全不同的记录。
可能这么写

Select * from table1 where not ( A=B or A =C or A =D or B=C or B=D or C=D)
现在呢,有增加了4个字段。 A1,B1,C1,D1
A A1作为逻辑上的一组,B C D 同理。

想求出4组字段完全不同的记录,怎么写呢?
hokor 2010-08-03
  • 打赏
  • 举报
回复
--如果id 是主键的话
select * from tb a join (
select A+A1 A2 ,B+B1 B2 ,C+C1 C2 ,D+D1 D2,max(id)
from tb
group by A+A1,B+B1,C+C1,D+D1 ) b
on a.id = b.id
hokor 2010-08-03
  • 打赏
  • 举报
回复
select * from tb a join (
select A+A1 A2 ,B+B1 B2 ,C+C1 C2 ,D+D1 D2
from tb
group by A+A1,B+B1,C+C1,D+D1 ) b
on a.A+A1 = A2 AND a.B+B1 = b.B2 AND a.C+C1 = c.C2 AND a.D+D1 = b.D2
天-笑 2010-08-03
  • 打赏
  • 举报
回复




select * from 表 where id in (select min(id) from 表 group by A+A1,B+B1,C+C1,D+D1 )
csuxp2008 2010-08-03
  • 打赏
  • 举报
回复
确实有点乱,不太明白

34,872

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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