求 一个 select 查询

guoll1 2011-07-17 12:31:03
表 A 表 B
tb A 中有 GPDM ZWMC SSD NBBM
tb B 中有 NBBM QSR (日期型)

需要查询出 A表中 ZWMC 相同 而在 B 表中 QSR 不同的记录


如 A 有以下记录
10000 05华能01 上 1
20000 05华能01 下 2
30000 02华能01 上 3
40000 02华能01 下 4
B 表中 有以下记录
1 2011-01-01
2 2011-01-01
3 2010-01-01
4 2010-01-02



则 查出的结果 是


30000 02华能01 2010-01-01
40000 02华能01 2010-01-02


...全文
119 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2011-07-17
  • 打赏
  • 举报
回复

declare @tbA table (GPDM int,ZWMC varchar(8),SSD varchar(2),NBBM int)
insert into @tbA
select 10000,'05华能01','上',1 union all
select 20000,'05华能01','下',2 union all
select 30000,'02华能01','上',3 union all
select 40000,'02华能01','下',4

declare @tbB table (NBBM int,QSR datetime)
insert into @tbB
select 1,'2011-01-01' union all
select 2,'2011-01-01' union all
select 3,'2010-01-01' union all
select 4,'2010-01-02'

select GPDM=max(GPDM),ZWMC,QSR=
convert(varchar(10),QSR,120) from @tbA a left join
@tbB b on a.NBBM=b.NBBM group by ZWMC,QSR
having(count(*)=1)
/*
GPDM ZWMC QSR
----------- -------- ----------
30000 02华能01 2010-01-01
40000 02华能01 2010-01-02
*/

guoll1 2011-07-17
  • 打赏
  • 举报
回复
大侠太厉害了 。就是这样的。 我一个同学 写了和你不一样的 但是 很复杂。一个表连一个表的。到最后都晕了。
太谢谢你了
叶子 2011-07-17
  • 打赏
  • 举报
回复

declare @tbA table (GPDM int,ZWMC varchar(8),SSD varchar(2),NBBM int)
insert into @tbA
select 10000,'05华能01','上',1 union all
select 20000,'05华能01','下',2 union all
select 30000,'02华能01','上',3 union all
select 40000,'02华能01','下',4 union all
select 50000,'07华能01','上',5 union all
select 60000,'08华能01','下',6

declare @tbB table (NBBM int,QSR datetime)
insert into @tbB
select 1,'2011-01-01' union all
select 2,'2011-01-01' union all
select 3,'2010-01-01' union all
select 4,'2010-01-02' union all
select 5,'2010-12-31' union all
select 6,'2010-12-31'

select GPDM=max(GPDM),a.ZWMC,QSR=convert(varchar(10),c.QSR,120)
from @tbA a left join (
select ZWMC from @tbA group by ZWMC having(count(1)>1)
) b on a.ZWMC=b.ZWMC
left join @tbB c on a.NBBM=c.NBBM
where b.ZWMC is not null
group by a.ZWMC,c.QSR having(count(*)=1)

/*
GPDM ZWMC QSR
----------- -------- ----------
30000 02华能01 2010-01-01
40000 02华能01 2010-01-02
*/

叶子 2011-07-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 guoll1 的回复:]

引用 7 楼 adamyan2011 的回复:
不会,是对的!


A
50000 07华能01 上 5
60000 08华能01 下 6

b
5 2010-12-31
6 2010-12-31


那么查出来的 就是不正确的了
[/Quote]
需要查询出 A表中 ZWMC 相同 而在 B 表中 QSR 不同的记录
就是说如果A表中只有一条的话,不出现重复的,就不取出来?
guoll1 2011-07-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 adamyan2011 的回复:]
不会,是对的!
[/Quote]

A
50000 07华能01 上 5
60000 08华能01 下 6

b
5 2010-12-31
6 2010-12-31


那么查出来的 就是不正确的了
ADAMyan2011 2011-07-17
  • 打赏
  • 举报
回复
不会,是对的!
guoll1 2011-07-17
  • 打赏
  • 举报
回复
不好意思 我用你的代码来查的话 就把 ZWMC 不同 但是QSR 相同的也会查出来 。




[Quote=引用 2 楼 maco_wang 的回复:]
SQL code

declare @tbA table (GPDM int,ZWMC varchar(8),SSD varchar(2),NBBM int)
insert into @tbA
select 10000,'05华能01','上',1 union all
select 20000,'05华能01','下',2 union all
select 30000,'02华能01'……
[/Quote]
guoll1 2011-07-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chuanzhang5687 的回复:]
SQL code
select gpdm,zwmc,qsr from a left join b on a.nbbm=b.nbbm where zwmc='02华能01'
[/Quote]


老大 里面有好多数据的。ZWMC 相同的 是 未知的。 不同只提出来一条我知道的呀
guoll1 2011-07-17
  • 打赏
  • 举报
回复
不好意思 我用你的代码来查的话 就把 ZWMC 不同 但是QSR 相同的也会查出来 。
chuanzhang5687 2011-07-17
  • 打赏
  • 举报
回复
select gpdm,zwmc,qsr from a left join b on a.nbbm=b.nbbm where zwmc='02华能01'

34,576

社区成员

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

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