大虾们急呀,头痛,不知道该怎样做SQL语句

qyc 2003-12-12 02:50:03
我现在想查找人员所在的部门,职务,但是我却不知道该怎样去查,而且职务排序
管理员表结构:
人员信息表:单位ID,单位名称,人员姓名, CODE1, CODE2, CODE3、、、
记录:001 微软公司 暗暗 经理 技术部 长春市
002 IBM公司 好好 市场部 北京市 员工、、、

信息定义表:单位ID,单位名称, CODE1, CODE2, CODE3、、、、CODE15
记录:001 微软公司 职务 部门 住址、、、、
002 IBM公司 部门 住址 职务、、、、
因为是客户自己定义字段名字所以我们并不知道具体CODE几是职务、部门
我该怎样操作才能根据信息定义表查找人员信息,比如:想找到市场部的人员
根据职务排序
...全文
16 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
shuiniu 2003-12-12
比较麻烦!呵呵!
  • 打赏
  • 举报
回复
zjcxc 2003-12-12
--如果要排序,还是要将上面的结果先横表转换成竖表,并生成新表才好处理.
  • 打赏
  • 举报
回复
zjcxc 2003-12-12
--将横表转换成竖表处理就行啦.

--测试表
create table 人员信息表(单位ID varchar(4),单位名称 varchar(10),人员姓名 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 人员信息表
select '001','微软公司','暗暗','经理','技术部','长春市'
union all select '002','IBM公司','好好','市场部','北京市','员工'

create table 信息定义表(单位ID varchar(4),单位名称 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 信息定义表
select '001','微软公司','职务','部门','住址'
union all select '002','IBM公司','部门','住址','职务'
go

--转换成竖表
declare @s1 varchar(8000),@s2 varchar(8000)
select @s1='',@s2=''
select @s1=@s1+' union all select 单位ID,单位名称,人员姓名,类别id='''
+name+''',' +name+' from 人员信息表'
,@s2=@s2+' union all select 单位ID,单位名称,类别id='''
+name+''',' +name+' from 信息定义表'
from syscolumns where object_id('人员信息表')=id and name like 'code%'
select @s1=substring(@s1,12,8000),@s2=substring(@s2,12,8000)

--查询:市场部的人员,根据职务排序

exec('select * from(
select a.单位ID,a.单位名称,a.人员姓名,类别=b.code1,类别值=a.code1
from('+@s1+') a join ('+@s2+') b on a.单位id=b.单位id and a.类别id=b.类别id
) a
where 类别=''部门'' and 类别值=''市场部''
')


go
--删除测试表
drop table 人员信息表,信息定义表

/*--测试结果
单位ID 单位名称 人员姓名 类别 类别值
---- ---------- ---------- ---------- ----------
002 IBM公司 好好 部门 市场部

--*/
  • 打赏
  • 举报
回复
zjcxc 2003-12-12
--上面的理解错了,应该是这样:

--将横表转换成竖表处理就行啦.

--测试表
create table 人员信息表(单位ID varchar(4),单位名称 varchar(10),人员姓名 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 人员信息表
select '001','微软公司','暗暗',' 经理','技术部','长春市'
union all select '002','IBM公司','好好',' 市场部','北京市','员工'

create table 信息定义表(单位ID varchar(4),单位名称 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 信息定义表
select '001','微软公司','职务','部门','住址'
union all select '002','IBM公司','部门','住址','职务'
go

--转换成竖表
declare @s1 varchar(8000),@s2 varchar(8000)
select @s1='',@s2=''
select @s1=@s1+' union all select 单位ID,单位名称,人员姓名,类别id='''
+name+''',' +name+' from 人员信息表'
,@s2=@s2+' union all select 单位ID,单位名称,类别id='''
+name+''',' +name+' from 信息定义表'
from syscolumns where object_id('人员信息表')=id and name like 'code%'
select @s1=substring(@s1,12,8000),@s2=substring(@s2,12,8000)
exec('select a.单位ID,a.单位名称,a.人员姓名,类别=b.code1,类别值=a.code1
from('+@s1+') a join ('+@s2+') b on a.单位id=b.单位id and a.类别id=b.类别id
')


go
--删除测试表
drop table 人员信息表,信息定义表

/*--测试结果
单位ID 单位名称 人员姓名 类别 类别值
---- ---------- ---------- ---------- ----------
001 微软公司 暗暗 职务 经理
002 IBM公司 好好 部门 市场部
001 微软公司 暗暗 部门 技术部
002 IBM公司 好好 住址 北京市
001 微软公司 暗暗 住址 长春市
002 IBM公司 好好 职务 员工
--*/
  • 打赏
  • 举报
回复
zjcxc 2003-12-12
--将横表转换成竖表处理就行啦.

--测试表
create table 人员信息表(单位ID varchar(4),单位名称 varchar(10),人员姓名 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 人员信息表
select '001','微软公司','暗暗',' 经理','技术部','长春市'
union all select '002','IBM公司','好好',' 市场部','北京市','员工'
go

--转换成竖表
declare @s varchar(8000)
set @s=''
select @s=@s+' union all select 单位ID,单位名称,人员姓名,'
+name+' from 人员信息表'
from syscolumns where object_id('人员信息表')=id and name like 'code%'
set @s=substring(@s,12,8000)
exec('select 单位ID,单位名称,人员姓名,信息=code1 into 人员信息表1 from('+@s+') a ')

--显示生成的新表结果
select * from 人员信息表1

go
--删除测试表
drop table 人员信息表,人员信息表1

/*--测试结果
单位ID 单位名称 人员姓名 信息
---- ---------- ---------- ----------
001 微软公司 暗暗 经理
002 IBM公司 好好 市场部
001 微软公司 暗暗 技术部
002 IBM公司 好好 北京市
001 微软公司 暗暗 长春市
002 IBM公司 好好 员工

--*/
  • 打赏
  • 举报
回复
j9988 2003-12-12
declare @sql varchar(8000)

create newtable table(单位ID,单位名称,人员姓名, CODE1, CODE2, CODE3、、、)

set @sql='insert newtable select 单位ID,单位名称,人员姓名,部门,住址,职务....(你所需的规定顺序)
from (select 单位ID,单位名称,人员姓名,'
select @sql=@sql+'code1 as '+code1+','+
'code2 as '+code2+','+
'code3 as '+code3+','+
'code4 as '+code4+','+
'code5 as '+code5+','+
'code6 as '+code6+','+
'code7 as '+code7+','+
'code8 as '+code8+','+
'code9 as '+code9+','+
'code10 as '+code10+','+
'code11 as '+code11+','+
'code12 as '+code12+','+
'code13 as '+code13+','+
'code14 as '+code14+','+
'code15 as '+code15+' from 人员信息表 where 单位ID=''001'' ' from 信息定义表 where 单位ID='001'

exec(@sql)

你自已写个循环,把每个单位的信息按规定顺序导入新表中
  • 打赏
  • 举报
回复
yoki 2003-12-12
总的有个标准或者说是规律呀?
  • 打赏
  • 举报
回复
txlicenhe 2003-12-12
好象有点乱。
  • 打赏
  • 举报
回复
victorycyz 2003-12-12
select
a.单位名称,
a.人员姓名,
( case when b.code1='职务' then a.code1
when b.code2='职务' then a.code2
...
when b.code15='职务' then a.code15
) as 职务
(case ...) as 部门 ----与职务的查询方法相同
from 人员信息表 a join 信息定义表 b on a.单位id=b.单位id
order by
( case when b.code1='职务' then a.code1
when b.code2='职务' then a.code2
...
when b.code15='职务' then a.code15
)
  • 打赏
  • 举报
回复
j9988 2003-12-12
得把人员信息表,按一个标准的顺序导入一个新表中.这样对下次查询使用也方便.
  • 打赏
  • 举报
回复
相关推荐
发帖
疑难问题
加入

2.1w+

社区成员

MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
申请成为版主
帖子事件
创建了帖子
2003-12-12 02:50
社区公告
暂无公告