还有一个sql语句

yooono 2006-07-24 06:32:57
针对如下表格:
代码 值 单号
a 12 1
b 100 1
a 96 1
d 11 2
b 10 2
a 5 2

现在我要得到:在单号基础上:(代码是a并且值>10)并且(代码是b并且值>30)所有记录
这样说清楚不,我在描述下
譬如针对单号1的我要查询:单号=1 并且(代码是a并且值>10)并且(代码是b并且值>30)
其中这个1是不确定的,就是所有的

...全文
369 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
yooono 2006-07-26
  • 打赏
  • 举报
回复
夸名字的木分哈
logoes 2006-07-25
  • 打赏
  • 举报
回复
declare @t table
(
CODE varchar(5),
VAL int,
BILL int
)
insert into @t
select 'a',12,1 union all
select 'b',100,1 union all
select 'a',96,1 union all
select 'd',111,2 union all
select 'b',10,2 union all
select 'a',5,2 union all
select 'a',23,3 union all
select 'b',50,3 union all
select 'a',3,4 union all
select 'b',100,4


SELECT DISTINCT B.BILL
FROM (SELECT BILL FROM @T WHERE CODE = 'A' AND VAL > 10) A
JOIN (SELECT BILL FROM @T WHERE CODE = 'B' AND VAL > 30) B
ON A.BILL=B.BILL
yooono 2006-07-25
  • 打赏
  • 举报
回复
恩,菜鸟的正确,但是不太满意...
昵称被占用了 2006-07-25
  • 打赏
  • 举报
回复
vfp_system(菜鸟一个) 结果使对的,虽然写得复杂了点
vfp_system 2006-07-25
  • 打赏
  • 举报
回复
你测试过我的没有?我的是正确的。你看结果就知道。
昵称被占用了 2006-07-25
  • 打赏
  • 举报
回复
lz表达能力


一塌糊涂呀,一塌胡涂


呵呵
昵称被占用了 2006-07-25
  • 打赏
  • 举报
回复
select distinct 单号
from 表名 a
where 代码='a'
and 值>10
and exists (
select 1 from 表名
where 代码='b'
and 值>30
and 单号=a.单号
)


yooono 2006-07-25
  • 打赏
  • 举报
回复
而不是id是某一个数值。
条件1:(代码是a并且值>10)
条件2:(代码是b并且值>30)
比较着俩条件的前提是相同id的基础上作比较,
id不相同的就不符合记录了
yooono 2006-07-25
  • 打赏
  • 举报
回复
我的意思是:(代码是a并且值>10)并且(代码是b并且值>30)着俩条件的前提是id相同.
十一月猪 2006-07-25
  • 打赏
  • 举报
回复
不需要限制 你就把
and id = @id 去掉就可以了

你的意思1是变的 所以用了变量啊
yooono 2006-07-25
  • 打赏
  • 举报
回复
哦,没说明白,这个1是不确定的,我要在单号相同基础上:(代码是a并且值>10)并且(代码是b并且值>30)所有记录单号不固定
十一月猪 2006-07-25
  • 打赏
  • 举报
回复
and id = @id
============
@id是变量啊 就是你的1 啊上面的
也就是条件限制
yooono 2006-07-25
  • 打赏
  • 举报
回复
一塌糊涂呀,一塌胡涂
yooono 2006-07-25
  • 打赏
  • 举报
回复
and id = @id
这个怎么理解呀
yooono 2006-07-25
  • 打赏
  • 举报
回复
一觉醒来,好多回答,谢谢
测试中
binhe521 2006-07-25
  • 打赏
  • 举报
回复
yooono(处女主任喝醉酒后还是一条好汉)

名字不错
yangys 2006-07-24
  • 打赏
  • 举报
回复
要么这样,容易点
select *from (
select *from #t
where code='a' and num>10
union all
select *from #t
where code='b' and num>30) a
where id=1
十一月猪 2006-07-24
  • 打赏
  • 举报
回复
Try:
select * from tab
where (case when code = 'a' and num > 10 then 1
when code = 'b' and num > 30 then 1
else 0 end) = 1
and id = @id
vfp_system 2006-07-24
  • 打赏
  • 举报
回复
create table #t
(
code varchar(5),
num int,
id int
)
insert into #t
select 'a',12,1 union all
select 'b',100,1 union all
select 'a',96,1 union all
select 'd',111,2 union all
select 'b',10,2 union all
select 'a',5,2 union all
select 'a',23,3 union all
select 'b',50,3 union all
select 'a',3,4 union all
select 'b',100,4


SELECT id
FROM #t a
WHERE (SELECT COUNT(CASE WHEN code = 'a' AND num > 10 THEN id END)
FROM #t b
WHERE b.id = a.id) > 0 AND
(SELECT COUNT(CASE WHEN code = 'b' AND num > 30 THEN id END)
FROM #t b
WHERE b.id = a.id) > 0
GROUP BY id

--结果
1
3

看是不是你所要的。
hufeili 2006-07-24
  • 打赏
  • 举报
回复
理解错了。
加载更多回复(5)

34,588

社区成员

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

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