你好,你能帮我解决这个对我来说很难的基本问题吗? 我只想为供应商透视行,但我无法做到这一点.

这是我的数据集,只有几行-

  CREATE TABLE "PROB" ("VENDOR" VARCHAR2(26), "CATEGORY" VARCHAR2(26))

Insert into PROB (VENDOR,CATEGORY) values ('United co','bread');
Insert into PROB (VENDOR,CATEGORY) values ('United co','salt');
Insert into PROB (VENDOR,CATEGORY) values ('ali dist co','eggs');
Insert into PROB (VENDOR,CATEGORY) values ('ali dist co','meat');
Insert into PROB (VENDOR,CATEGORY) values ('ali dist co','yogurt');
Insert into PROB (VENDOR,CATEGORY) values ('marian srl','potato');

这是输出结果:

United co   ali dist co  marian srl
bread         eggs        potato
salt          meat  
             yogurt

除了LIST_AGG之外,我已经try 过但没有LOOK,但我希望所有内容都在多行上

  SELECT *
FROM (
    SELECT  VENDOR, CATEGORY
    FROM PROB
)
PIVOT (
    LISTAGG(CATEGORY, ', ') WITHIN GROUP (ORDER BY CATEGORY)
    FOR VENDOR IN (
        'United co' AS United_co,
        'ali dist co' AS ali_dist_co,
        'marian srl' AS marian_srl
    )
);

select 
       max(case when vendor='United co' then category end) as  united_co,
   max(case when vendor='ali dist co'  then category end) as ali_dist,
       max(case when vendor='marian srl'  then category end) as marian_srl
from (select a.*,
row_number() over (partition by vendor order by category) as rn
      from prob a
     ) t
group by vendor, rn;

SELECT UNITED_CO, ALI_DIST, MARIAN_SRL
FROM (
    SELECT  VENDOR, CATEGORY, row_number() over (partition by vendor order by vendor) as seqnum
    FROM PROB
)
PIVOT (
    max(CATEGORY)
    FOR seqnum IN (1 AS UNITED_CO , 2 AS ALI_DIST ,3 MARIAN_SRL)
); 

谢谢

推荐答案

条件聚合,这是您已经try 过但不正确的(从group by子句中删除vendor):

SQL> select
  2    max(case when vendor = 'United co' then category end) as united,
  3    max(case when vendor = 'ali dist co' then category end) as ali,
  4    max(case when vendor = 'marian srl'  then category end) as marian
  5  from (select vendor, category,
  6               row_number() over (partition by vendor order by category) rn
  7        from prob
  8       )
  9  group by rn;

UNITED                     ALI                        MARIAN
-------------------------- -------------------------- --------------------------
bread                      eggs                       potato
salt                       meat
                           yogurt

SQL>

或轴心:

SQL> select *
  2  from (select vendor, category,
  3          row_number() over (partition by vendor order by category) rn
  4        from prob
  5       )
  6  pivot (max(category)
  7         for vendor in ('United co', 'ali dist co', 'marian srl')
  8        );

        RN 'United co'                'ali dist co'              'marian srl'
---------- -------------------------- -------------------------- --------------------------
         1 bread                      eggs                       potato
         2 salt                       meat
         3                            yogurt

SQL>

Sql相关问答推荐

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

从自定义日期和时间开始,每月具有给定状态的公司数量

如何更新SQLite数据库中的表?

每组显示一行(表1中的分组值),表2中的不同列表用逗号分隔

如何从JSON数组中 Select 多个值

我怎样才能得到列值对应的最大值在另一个?

找到最新的连线

在SQL中,筛选其他列中只有一个值的ID

group-by-clause具有特定列,而不是oracle的toad中的all

SAS proc freq 或 proc sql 获取数据子集和整个数据的频率

如何修复初学者 SQL INNER JOIN 查询错误

确定小数中使用的精度位数

Postgresql - 如何根据阈值计算累积和

如何根据创建日期查找两个表中最接近的记录?

当我返回 sql 列时,有没有办法只反转数字? ( hebrew )

使用多个数据库调用重载 CQRS 模式

根据要过滤的列的值进行联接和分组

SQL 多个不满足的条件失败

使用SQLAlchemy和Postgres数据库创建新行时,为什么我的创建日期比更新日期晚?

MariaDB非常简单的MATCHAGAINST查询不使用FULLTEXT索引吗?