oracle纵向显示变为横向显示,该如何处理

oracle纵向显示变为横向显示
我有一个表纵向显示大致如下:
商品编码   门店   销量
------------------------
001             a       100
001             b       50
002             c       250
002             a       10
003             b       15
...
我现在想把门店(门店数量不是固定的),销量变为横向显示,如下
商品编码   门店a   门店b   门店c   ...
--------------------------------------
001            100      50
002            10                    250
003                        15
...

由于本人刚接触oracle,仅处于一知半解的状态。仅会门店是固定的写法,
但如果门店不是固定的,就不知如何下手了,也曾搜索过一些类似的帖子,但都不是看得很明白,
特来此开帖,望各位大虾不吝赐教。
------解决方案--------------------
一SQL暂时无解,求大神
------解决方案--------------------
动态构造,这个很容易懂吧
DECLARE
  V_SQL VARCHAR2(2000);
  CURSOR CURSOR_1 IS
    SELECT DISTINCT 门店 FROM TB T ORDER BY 门店;
 
BEGIN
  V_SQL := 'SELECT 商品编码';
  FOR V_XCLCK IN CURSOR_1 LOOP
    V_SQL := V_SQL 
------解决方案--------------------
 ',' 
------解决方案--------------------
 'SUM(DECODE(门店,''' 
------解决方案--------------------
 V_XCLCK.门店 
------解决方案--------------------

             ''',销量,0)) AS ' 
------解决方案--------------------
 V_XCLCK.门店;
  END LOOP;
 
  V_SQL := V_SQL 
------解决方案--------------------
 ' FROM TB GROUP BY 商品编码';
  --DBMS_OUTPUT.PUT_LINE(V_SQL);
  V_SQL := 'CREATE OR REPLACE VIEW TB2  AS ' 
------解决方案--------------------
 V_SQL;
  --DBMS_OUTPUT.PUT_LINE(V_SQL);
  EXECUTE IMMEDIATE V_SQL;
END;
------解决方案--------------------
建议楼主查查case when 语句,这是典型的行列转换。
------解决方案--------------------
干嘛字段名字要中文?怪不得没多少人回答呢,下次注意哦,亲
你试试这个语句:

select 商品编号,
   max(decode(门店,a,销量)) 门店a,
   max(decode(门店,b,销量)) 门店b,
   max(decode(门店,c,销量)) 门店c
from 表
group by 商品编号;
------解决方案--------------------
引用:
动态构造,这个很容易懂吧
DECLARE
  V_SQL VARCHAR2(2000);
  CURSOR CURSOR_1 IS
    SELECT DISTINCT 门店 FROM TB T ORDER BY 门店;
 
BEGIN
  V_SQL := 'SELECT 商品编码';
  FOR V_XCLCK IN CURSOR_1 LOOP
    V_SQL := V_SQL 
------解决方案--------------------
 ',' 
------解决方案--------------------
 'SUM(DECODE(门店,''' 
------解决方案--------------------
 V_XCLCK.门店 
------解决方案--------------------

             ''',销量,0)) AS ' 
------解决方案--------------------
 V_XCLCK.门店;
  END LOOP;
 
  V_SQL := V_SQL 
------解决方案--------------------
 ' FROM TB GROUP BY 商品编码';
  --DBMS_OUTPUT.PUT_LINE(V_SQL);
  V_SQL := 'CREATE OR REPLACE VIEW TB2  AS ' 
------解决方案--------------------
 V_SQL;
  --DBMS_OUTPUT.PUT_LINE(V_SQL);
  EXECUTE IMMEDIATE V_SQL;
END;


赞个
------解决方案--------------------
行转列什么的,应该可以实现
------解决方案--------------------

--在代码里面拼接 也很方便的 
--先查询SELECT DISTINCT 门店 FROM TB T ORDER BY 门店;返回所有的门店的集合ds
--然后拼接sql 和存储过程思路一样
string sql = "SELECT 商品编码";
for(int i = 0;i <= ds.table[0].rows.count;i++)
{
    
    sql += ",SUM(DECODE(门店,'"+ds.table[0].rows[i][0]+"',1,0)) \"门店"+ds.table[0].rows[i][0]+"\"";
}
sql += "FROM TB GROUP BY 商品编码";