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

标签 sql sql-server t-sql

我有一张这样的 table

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

子查询首先为每个要透视的结果生成一个字段名称,content1content2等,如下所示:

| 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 |

演示:http://www.sqlfiddle.com/#!6/095bb/11

关于sql - 需要有关 SQL 查询的帮助(自连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20208251/

相关文章:

sql - mysql : Count Posts and Group by date

php - SQL 查询出了什么问题?

sql-server - 在 SQL 表中存储表情符号

sql-server - 仅在我的机器上运行缓慢的查询

sql - 从两个表到单个 View 的 T-SQL 层次结构

sql - SQL Server 2008 中表格结果的分组和计数选择

php - 如何在 MySQL 中连接三个表?

mysql - 如何获取不在下一个表mysql中的数据

sql-server - SSIS 包在 Visual Studio 中运行良好,但在部署的机器上手动运行时失败

sql - 删除并重新创建主键