如何写Sql?

Oer 2008-04-03 09:08:54
表结构为
表名 字段名 公司名
tlb1 fld1 aaa
tlb1 fld1 bbb
tlb1 fld1 null
tlb1 fld2 null


当我登录公司为aaa时,就生成以下两条记录
tlb1 fld1 aaa
tlb1 fld2 null

当我登录公司为ccc时(没有公司对应的字段时就取公司名为null),就生成以下两条记录
tlb1 fld1 null
tlb1 fld2 null

这样SQL如何写?
...全文
80 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oer 2008-04-03
  • 打赏
  • 举报
回复
要是还有一个字段,就不行了如
create table os(表名 varchar(50),字段名 varchar(50),公司名 varchar(50),字段1 varchar(50))
insert into os select 'tlb1','fld1','aaa','1'
insert into os select 'tlb1','fld2','bbb','2'
insert into os select 'tlb1','fld1',null,'3'
insert into os select 'tlb1','fld2',null,'4'


declare @company varchar(20)
set @company='ccc'

select
a.表名,a.字段名,b.公司名,b.字段1
from
(select distinct 表名,字段名 from os) a
left join
(select * from os where 公司名=@company) b
on
a.字段名=b.字段名
and
a.表名=b.表名

/*
表名 字段名 公司名 字段1
----------- ------------- -----------
tlb1 fld1 NULL 1
tlb1 fld2 NULL null(错的)
*/

drop table os
laowan688 2008-04-03
  • 打赏
  • 举报
回复
6楼正解
Oer 2008-04-03
  • 打赏
  • 举报
回复
tks
ojuju10 2008-04-03
  • 打赏
  • 举报
回复


select a.表名,a.字段名,b.公司名 from
(select distinct 表名,字段名 from os) a
left join (select * from os where 公司名='aaa') b
on a.表名=b.表名 and a.字段名=b.字段名

pt1314917 2008-04-03
  • 打赏
  • 举报
回复
哦我也看错了。晕```
子陌红尘 2008-04-03
  • 打赏
  • 举报
回复
抱歉,写错了联接条件里的一个字段名,借用pt1314917的数据:



create table os(表名 varchar(50),字段名 varchar(50),公司名 varchar(50))
insert into os select 'tlb1','fld1','aaa'
insert into os select 'tlb1','fld2','bbb'
insert into os select 'tlb1','fld1',null
insert into os select 'tlb1','fld2',null


declare @company varchar(20)
set @company='ccc'

select
a.表名,a.字段名,b.公司名
from
(select distinct 表名,字段名 from os) a
left join
(select * from os where 公司名=@company) b
on
a.字段名=b.字段名
and
a.表名=b.表名

/*
表名 字段名 公司名
----------- ------------- -----------
tlb1 fld1 NULL
tlb1 fld2 NULL
*/

drop table os
flairsky 2008-04-03
  • 打赏
  • 举报
回复
select a.表名,a.字段名,b.公司名
from (select distinct 表名,字段名 from 表) a
left join
(select * from 表 where 公司名=@company) b
on a.字段名=b.字段名 and a.公司名=b.公司名
fa_ge 2008-04-03
  • 打赏
  • 举报
回复
当我登录公司为aaa时,就生成以下两条记录
tlb1 fld1 aaa
tlb1 fld2 null -----这条怎么来的? 还是 tlb1 fld1 null
Oer 2008-04-03
  • 打赏
  • 举报
回复
1楼的,不行啊
pt1314917 2008-04-03
  • 打赏
  • 举报
回复


create table os(表名 varchar(50),字段名 varchar(50),公司名 varchar(50))
insert into os select 'tlb1','fld1','aaa'
insert into os select 'tlb1','fld2','bbb'
insert into os select 'tlb1','fld1',null
insert into os select 'tlb1','fld2',null

create proc wsp
@c varchar(50)=null
as
if(isnull(@c,'')='')
select * from os where isnull(公司名,'')=isnull(@c,'')
else
select * from os where 公司名=@c
union all
select a.* from os a,os b where b.公司名=@c and a.字段名<>b.字段名 and isnull(a.公司名,'')=''


exec wsp

exec wsp 'aaa'
子陌红尘 2008-04-03
  • 打赏
  • 举报
回复
select
a.表名,a.字段名,b.公司名
from
(select distinct 表名,字段名 from 表) a
left join
(select * from 表 where 公司名=@company) b
on
a.字段名=b.字段名
and
a.公司名=b.公司名

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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