我有 2 温度。看起来像这样的表
@t1(p_ssn,p_fname,p_lname,Gender,.............)
-> 这个表有员工记录,大约有30 列
@t2(p_ssn,benefit,medical_premium,dental_premium,..............)
-> 此表有员工福利,大约有60 列
中的每条记录@t1
都会有 1 个或多个对应的记录@t2
我如何在表之间进行连接以获得这样的显示(在 p_ssn 上连接)我想要每个员工记录,然后是他们的所有福利记录 -每个都在不同的行上,如图所示
p_fname,p_lname,Gender etc... -> 1st employee
benefit1,medical_premium1,dental_premium_1 -> all the benefit records for this employee
p_fname,p_lname,Gender etc... -> 2nd employee
benefit1,medical_premium1,dental_premium_1
现在,我正在使用循环。但是由于每条记录都比较大,走一半就挂了。
@Tim - 这就是我卡住的地方。@t1 只有 30 列,但 @t2 有 60 列
-- 实际查询
select col1, col2 from
( -- Get employees
select 10 as ordinal, p_ssn, p_fname as col1, p_lname as col2,**there are only 30 columns here**
from @t1
union all
-- Get benefits
select 20 as ordinal, a.p_ssn, cast(b.benefit as varchar(50)), cast(b.premium as varchar(50)) ,**I want to display more columns here like b.col1,b.col2,b.col3 etc...60 columns**
from @t1 a
join @t2 b on a.p_ssn = b.p_ssn ) as a order by p_ssn, ordinal
我知道我可以执行以下操作
select 10 as ordinal, p_ssn, p_fname as col1, p_lname as col2,'','',''
from @t1
union all
select 20 as ordinal, a.p_ssn, cast(b.benefit as varchar(50)), cast(b.premium as varchar(50)),b.col1,b.col2,n.col3
但这是一个文件提要,不允许有空格。事实上,我无法使用强制转换,因为长度和数据类型已定义且无法更改