无聚合的自连接sql
我有一张结构如下的表格:无聚合的自连接sql,sql,sql-server,Sql,Sql Server,我有一张结构如下的表格: ID EmployeeType Name 1 Contract John, Baxter 2 Contract Will, Smith 3 Full Josh, Stevens 4 Full Sitar, Zhang 我所需要做的就是旋转它,以便获得以下输出: Contract_Employee FullTime_Em
ID EmployeeType Name
1 Contract John, Baxter
2 Contract Will, Smith
3 Full Josh, Stevens
4 Full Sitar, Zhang
我所需要做的就是旋转它,以便获得以下输出:
Contract_Employee FullTime_Employee
John, Baxter Josh, Stevens
Will,Smith Sitar, Zhang
你知道我如何在一个查询中做到这一点吗 这是一个有趣的请求。我会这样做: (基本上,只需为两个派生表派生一个假键“join”,为承包商派生一个假键,为员工派生一个假键)
这是一个很有趣的要求。我会这样做: (基本上,只需为两个派生表派生一个假键“join”,为承包商派生一个假键,为员工派生一个假键)
执行此操作的一种方法是使用聚合:
select max(case when employeetype = 'Contract' then Name end) as ContractEmployees,
max(case when employeetype = 'Full' then Name end) as FullEmployees
from (select t.*,
row_number() over (partition by employeetype order by id) as seqnum
from table t
) t
group by seqnum;
执行此操作的一种方法是使用聚合:
select max(case when employeetype = 'Contract' then Name end) as ContractEmployees,
max(case when employeetype = 'Full' then Name end) as FullEmployees
from (select t.*,
row_number() over (partition by employeetype order by id) as seqnum
from table t
) t
group by seqnum;
有什么关系?为什么约翰·巴克斯特和乔希·史蒂文斯在同一排?感谢你的回复。不幸的是,两者之间没有关系。(遗憾的是,我刚刚继承了这些表格)。我只需要把所有的合同雇员和全职雇员并列出来。如果没有一个共同点,我很确定我们不能做到这一点,但没有足够的信心来确定(万一我错过了一个我以前不知道的sql技巧)…因此问题就来了。你在使用什么报告工具?你能把子报告放在相邻的位置吗?布莱恩,谢谢你的回答。不幸的是,没有工具——只是一个临时查询。是的,我可以把两个列表放在一起..但我希望用SQL:)它们之间有什么关系?为什么约翰·巴克斯特和乔希·史蒂文斯在同一排?感谢你的回复。不幸的是,两者之间没有关系。(遗憾的是,我刚刚继承了这些表格)。我只需要把所有的合同雇员和全职雇员并列出来。如果没有一个共同点,我很确定我们不能做到这一点,但没有足够的信心来确定(万一我错过了一个我以前不知道的sql技巧)…因此问题就来了。你在使用什么报告工具?你能把子报告放在相邻的位置吗?布莱恩,谢谢你的回答。不幸的是,没有工具——只是一个临时查询。是的,我可以把两个列表放在一起..但我希望用SQL:)它们之间有什么关系?为什么约翰·巴克斯特和乔希·史蒂文斯在同一排?感谢你的回复。不幸的是,两者之间没有关系。(遗憾的是,我刚刚继承了这些表格)。我只需要把所有的合同雇员和全职雇员并列出来。如果没有一个共同点,我很确定我们不能做到这一点,但没有足够的信心来确定(万一我错过了一个我以前不知道的sql技巧)…因此问题就来了。你在使用什么报告工具?你能把子报告放在相邻的位置吗?布莱恩,谢谢你的回答。不幸的是,没有工具——只是一个临时查询。是的,我可以把两个列表放在一起..但我希望用SQL:)谢谢你,这对结构和所有情况都有效,除非有一名员工同时拥有合同和全额工资。我想我必须应用某种匹配,以确保它正确列出。如果您加入
c.name=f.name或c.rn=f.rn
,这将使它们排列在一起,如果这是您的意思的话。谢谢安德鲁…这就是我所做的,并且最匹配,但是数据当然不一致……必须使用正则表达式才能找到精确的匹配:)谢谢你,这对结构和所有情况都有效,除非有一名员工同时拥有合同和全额工资。我想我必须应用某种匹配,以确保它正确列出。如果您加入c.name=f.name或c.rn=f.rn
,这将使它们排列在一起,如果这是您的意思的话。谢谢安德鲁…这就是我所做的,并且最匹配,但是数据当然不一致……必须使用正则表达式才能找到精确的匹配:)谢谢你,这对结构和所有情况都有效,除非有一名员工同时拥有合同和全额工资。我想我必须应用某种匹配,以确保它正确列出。如果您加入c.name=f.name或c.rn=f.rn
,这将使它们排列在一起,如果这是您的意思的话。谢谢安德鲁…这就是我所做的,并且最匹配,但数据当然不一致……必须使用正则表达式才能找到精确匹配:)