Sql 创建一列字段为列的表

Sql 创建一列字段为列的表,sql,Sql,我有这张桌子: 主表 选择名称、专业来源、专业1、专业2 来自sku首字母 我想查询表以获得该结果: 最终表格 正如您在第一个表中所看到的,我在不同的行中有源中的专业,其余的都相等,但是我想用第一行的结果创建列speciality_1_SRC,用第二行的结果创建列speciality_2_SRC,并且所有内容都保持相等。你能帮我吗 您最多可以有3个专业这回答了最初的问题,该问题只有两个专业栏 我认为聚合可以满足您的要求: select name, min(spec_sourc

我有这张桌子:

主表

选择名称、专业来源、专业1、专业2
来自sku首字母

我想查询表以获得该结果:

最终表格

正如您在第一个表中所看到的,我在不同的行中有源中的专业,其余的都相等,但是我想用第一行的结果创建列speciality_1_SRC,用第二行的结果创建列speciality_2_SRC,并且所有内容都保持相等。你能帮我吗


您最多可以有3个专业

这回答了最初的问题,该问题只有两个专业栏

我认为聚合可以满足您的要求:

select name,
       min(spec_source) as spec_1_source,
       nullif(max(spec_source), min(spec_source)) as spec_2_source,
       spec_1, spec_2
from t
group by name, spec_1, spec_2;

如果不想使用存储过程,可以先获取最小值最大值,然后将结果集加入该表以获取mid。唯一的缺点是,如果有记录只有两个专业源,mid将为空

WITH min_max AS (
select a.name,
       min(a.specialty_source) as spec_1_source,
        COALESCE(nullif(max(a.specialty_source), min(a.specialty_source)),'') as spec_3_source,
       a.specialty_1, a.specialty_2
from yourtable a 
group by a.name, a.specialty_1, a.specialty_2
)
SELECT min_max.name,
  min_max.spec_1_source,
  mid.specialty_source spec_2_source,
  min_max.spec_3_source,
  min_max.specialty_1,
  min_max.specialty_2
FROM yourtable mid RIGHT OUTER JOIN min_max ON (mid.name=min_max.name AND mid.specialty_source NOT IN (min_max.spec_1_source,min_max.spec_3_source) )

请不要使用图像(或图像链接),请使用格式化文本。请将相关代码作为文本添加到您的问题表中,并且表格应为文本格式,而不是屏幕截图。谢谢您使用的是哪种dbms?一个人的最大专业数量是否会固定?或者玛丽亚以后会专门研究D吗?什么定义了“第一”行?但我们可以有3行specialties@martaferreira . . . 这回答了您在这里提出的问题。如果你有一个不同的问题,把它当作一个新问题来问。一定要有正确的解释。