需要有关SQL查询(自连接)的帮助

需要有关SQL查询(自连接)的帮助,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一张这样的桌子 MAIN ID CONTENT SUB ID ABCD ONE 888 ABCD TWO 888 我希望查询结果是这样的 MAIN ID SUB ID CONTENT1 CONTENT2 ABCD 888 ONE TWO 您可以使用PIVOT功能: select * from ( select [main id], [sub id], [content],

我有一张这样的桌子

MAIN ID CONTENT SUB ID

ABCD    ONE     888

ABCD    TWO     888
我希望查询结果是这样的

MAIN ID SUB ID  CONTENT1  CONTENT2

ABCD    888      ONE         TWO    

您可以使用
PIVOT
功能:

select
  *
from (
  select
    [main id],
    [sub id],
    [content],
    'content' + cast(
        row_number() over (partition by [main id],[sub id] order by content)
     as varchar(5)) as contentIX
  from
    table1
) T
pivot (max(Content) for contentIX in (content1,content2)) as content
子查询首先为每个要透视的结果生成字段名,
content1
content2
,等等。如下所示:

| MAIN ID | SUB ID | CONTENT | CONTENTIX |
|---------|--------|---------|-----------|
|    ABCD |    888 |     ONE | content1  |
|    ABCD |    888 |     TWO | content2  |
然后外部查询在
CONTENTIX
列上执行一个透视,以获得最终结果:

| MAIN ID | SUB ID | CONTENT1 | CONTENT2 |
|---------|--------|----------|----------|
|    ABCD |    888 |      ONE |      TWO |

演示:

更像是一个pivot查询。你可以通过pivot来完成,就像这里:解决我的问题,谢谢!