无聚合的自连接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
,这将使它们排列在一起,如果这是您的意思的话。谢谢安德鲁…这就是我所做的,并且最匹配,但数据当然不一致……必须使用正则表达式才能找到精确匹配:)