在SQL中,有没有办法将类别值从行转置到列

示例

create table sample1 (
    Col1 nvarchar(max),
    [Values] nvarchar(max),
)

insert into sample1
values ('CatA','XCY'), ('CatB','XCY'), ('CatA','XC'), ('CatB','XC'), ('CatA','KJ'), ('CatA','KG'),('CatA','KFD'), ('CatB','KG')

select * from sample1(将给出低于值的值)

Col1    Values
CatA    XCY
CatB    XCY
CatA    XC
CatB    XC
CatA    KJ
CatA    KG
CatA    KFD
CatB    KG

预期yields

CatA   CatB
XCY    XCY
XC     XC
KJ     NULL
KG     KG
KFD    NULL

我try 了下面的方法,但没有得到


select *
from
(
  select [Values], Col1
  from sample1
) d
pivot
(
  max([Values])
  for Col1 in (CatA, CatB)
) piv;

推荐答案

这可以通过一个完整的连接来解决,它可以确保双方都可以获得它们的值,并使用NULL填充缺少的值:

create table sample1 (
Col1 nvarchar(max),
[Values] nvarchar(max),
)

insert into sample1
values ('CatA','XCY'), ('CatB','XCY'), ('CatA','XC'), ('CatB','XC'), ('CatA','KJ'), ('CatA','KG'),('CatA','KFD'), ('CatB','KG')

select a.[values] as catA, b.[values] as catB
from (
    select col1, [values]
    from sample1
    where col1 = 'CatA'
    ) a
full join (
    select col1, [values]
    from sample1
    where col1 = 'CatB'
    ) b
    ON b.[values] = a.[values]

输出:

catA catB
XCY XCY
XC XC
KJ NULL
KG KG
KFD NULL

Sql相关问答推荐

SQL—如何根据2列填写缺失的值

在甲骨文中查找前一个星期一的S日期

从依赖于其他表的值的XREF表中的值分组获得正确的计数?

对任何(数组)使用LIKE?

在SQL查询中使用COALESS

如何找到一个组合的两个列,这是不是在其他表在ORACLE SQL?

我如何才能在付款人单列中拉出只有9个付款人单的人?

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

在 PostgreSQL 中使用 ltree 列进行累积

每个分组最多 Select 最后 2 个值并并排显示它们

MySQL中的递归查询邻接表深度优先?

Postgresql:在链接表中判断相关表中插入值的条件

REGEXP_SUBSTR使用方法

如何将输出转换为二维格式?

将表格和字符串连接以 for each 记录生成订单项目

在 MS Access 中连接相关记录

如何通过子 Select 在一次更新(并行数组)中多次更新相同的行

SQL查询以获取从特定可变日期看到的用户

PostgresQL-根据另一列找到 3 个最低值

在sql server中创建唯一标识符列