我在弄清楚如何重新安排桌子时遇到了很多麻烦。我有一个大表,看起来像这样:
+--------+-----------+
| NAME | ACCOUNT # |
+--------+-----------+
| Nike | 87 |
| Nike | 12 |
| Adidas | 80 |
| Adidas | 21 |
+--------+-----------+
我想重新安排它看起来像这样:
+------+--------+
| Nike | Adidas |
+------+--------+
| 87 | 80 |
| 12 | 21 |
+------+--------+
但我似乎无法弄清楚如何。我尝试使用PIVOT,但这只适用于聚合函数。我也试过使用FOR LOOP,但是不能让它正常工作。
答案 0 :(得分:0)
您可以通过多种方式执行此操作,但所有方法都是通过枚举行来实现的。以下是使用条件聚合的示例:
select max(case when name = 'Nike' then account end) as Nike,
max(case when name = 'Adidas' then account end) as Adidas
from (select t.*,
row_number() over (partition by name order by account desc) as seqnum
from t
) t
group by seqnum;
答案 1 :(得分:0)
再次考虑一个数据透视解决方案,但首先添加一个用于滚动Name
组计数的rownumber。下面假设自动编号ID
字段:
SELECT * FROM
(
SELECT Name, "Account #",
(ROW_NUMBER() OVER(PARTITION BY Name ORDER BY ID)) GrpRowNum
/* ALT: (SELECT Count(*) FROM Table1 sub
* WHERE sub.Name = Table1.Name AND sub.ID <= Table1.ID) GrpRowNum */
FROM Table1
)
PIVOT
(
SUM("Account #")
FOR Name IN ('Nike', 'Adidas')
)
ORDER BY RowNum;
但是,对于大约200个项目,如果没有各种变通方法(包括IN
输出或PL / SQL存储过程),则无法轻松呈现Pivot的PIVOT XML
子句。类似地,您可以使用通用编码(Java,PHP,Python,R)在向量/数组中检索SELECT DISTINCT Name FROM Table1
结果集,使用引号和逗号分隔符连接元素值(折叠或插入数组),并删除整个列表在IN
条款中。