隐藏部分相同数据

chuanzhang5687 2011-09-01 12:58:56
create table tb1
(
id int,
[name] varchar(10),
[address] varchar(100)
)
create table tb2
(
id int ,
sex varchar(2),
age int
)
insert into tb1 values(1,'jim','白宫')
insert into tb1 values(2,'tom','中南海')
insert into tb2 values(1,'男',20)
insert into tb2 values(1,'男',30)
insert into tb2 values(2,'女',20)
insert into tb2 values(2,'女',30)
create view view1
as
select a.*, b.id as b_id ,sex,age from tb1 a left join tb2 b on a.id = b.id

select * from view1
/*
id,name,address,b_id,sex,age
1,jim,白宫,1,男,20
1,jim,白宫,1,男,30
2,tom,中南海,2,女,20
2,tom,中南海,2,女,30

(4 行受影响)


如上面这个例子,我想在视图上面 把tb1 的重复数据给隐藏掉 tb2的数据无变化
下面是我想要的结果
/*
id,name,address,b_id,sex,age
1,jim,白宫,1,男,20
1,男,30
2,tom,中南海,2,女,20
2,女,30

(4 行受影响)
...全文
176 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
猪小娣 2011-09-14
  • 打赏
  • 举报
回复
我表示,,,,,,,,头晕···········
快溜 2011-09-01
  • 打赏
  • 举报
回复
我嚓,散分,不带我
稻草_木偶 2011-09-01
  • 打赏
  • 举报
回复
学习了
q465897859 2011-09-01
  • 打赏
  • 举报
回复
学习了
chuanzhang5687 2011-09-01
  • 打赏
  • 举报
回复
with tmp(show_order,id,name,[address], b_id,sex,age)as
(
select
show_order = row_number() over(partition by a.id,a.name,a.[address] order by a.id),a.*,b.id as b_id ,sex,age
from tb1 a left join tb2 b on a.id = b.id
)

select id,name,[address], b_id,sex,age from tmp where show_order = 1
union
select null,null,null, b_id,sex,age from tmp where show_order <> 1
chuanzhang5687 2011-09-01
  • 打赏
  • 举报
回复
例子上id是整型,实际上id是个GUID类型。嘿嘿![Quote=引用 12 楼 sgtzzc 的回复:]
引用 10 楼 geniuswjt 的回复:

--整型也可以吧- -


第二行id是0,有木有?
[/Quote]
NBDBA 2011-09-01
  • 打赏
  • 举报
回复
-晴天 2011-09-01
  • 打赏
  • 举报
回复
查询时将 id 转为字符型,重复的就可以写成空串了.
--小F-- 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sgtzzc 的回复:]
引用 6 楼 fredrickhu 的回复:
我知道了 船长是在玩我们


你还真是被玩到了,id是整型,这个是不行的
case when id0=1 then id else '' end as id
[/Quote]

nzperfect 2011-09-01
  • 打赏
  • 举报
回复
sgtzzc 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 geniuswjt 的回复:]

--整型也可以吧- -
[/Quote]

第二行id是0,有木有?
geniuswjt 2011-09-01
  • 打赏
  • 举报
回复
好吧,看错,2了,今天不在状态,匿了[Quote=引用 10 楼 geniuswjt 的回复:]
SQL code
--整型也可以吧- -
select id=case when rn=1 then id else '' end,
name=case when rn=1 then name else '' end,
address=case when rn=1 then address else '' end,
b_id,sex,age
from
(
select rn=row……
[/Quote]
chuanzhang5687 2011-09-01
  • 打赏
  • 举报
回复
这个真没有。
这个是个例子
事实上有点杂,一时没想出来![Quote=引用 6 楼 fredrickhu 的回复:]
我知道了 船长是在玩我们
[/Quote]
sgtzzc 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fredrickhu 的回复:]
我知道了 船长是在玩我们
[/Quote]

你还真是被玩到了,id是整型,这个是不行的
case when id0=1 then id else '' end as id
--小F-- 2011-09-01
  • 打赏
  • 举报
回复
我知道了 船长是在玩我们
--小F-- 2011-09-01
  • 打赏
  • 举报
回复
select
case when id0=1 then id else '' end as id,
case when id0=1 then name else '' end as name,
case when id0=1 then address else '' end as address,
b_id,sex,age
from
(select id0=row_number()over(partition by id,name,address order by getdate()),* from tb)t
AcHerat 元老 2011-09-01
  • 打赏
  • 举报
回复
船长怎么问这个???
geniuswjt 2011-09-01
  • 打赏
  • 举报
回复

--用手把它们捂住~
开玩笑,不会,关注
sgtzzc 2011-09-01
  • 打赏
  • 举报
回复
try
create view view1
as
select id=case when rn=1 then ltrim(id) else '' end,
name=case when rn=1 then name else '' end,
address=case when rn=1 then name else '' end,
b_id,sex,age
from
(
select rn=row_number() over(partition by a.id,a.name,a.address order by getdate()),
a.*, b.id as b_id ,sex,age from tb1 a left join tb2 b on a.id = b.id
) t

go

34,596

社区成员

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

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