一行中有许多行(相当于 model.matrix)

Many rows in one line (model.matrix equivalent)

我有一个 table user_id 和一些值:

user_id  |  type  |  amount
---------------------------
user1    |  credit|   15
---------------------------
user1    |  bill  |  100
---------------------------
user1    |  fraud |  10000
----------------------------
user3    |  fraud |   1000000

我的目标是每行有一个 user_id:

user_id  | credit  |  bill  |  fraud  |
----------------------------------------
user1    |   15    |   100  |    10000
----------------------------------------
user3    |    0    |    0   |   1000000

我可以使用 CASE 创建静态语句,但是我希望动态创建这部分,因为在某些情况下我有太多类别。

CASE WHEN type='credit' THEN amount ELSE 0 END AS credit,
CASE WHEN type='fraud' THEN amount ELSE 0 END AS fraud,
CASE WHEN type='bill' THEN amount ELSE 0 END AS bill
and max() and group by in following select().

如果您熟悉 R 语言,我正在寻找 model.matrix() 等价物。

编辑 我正在 SQL/Redshift 中寻找解决方案。我知道如何在 R 中做到这一点,但是信息量太大,无法在 R 中处理。

正如我在问题中提到的,有一种简单的方法可以扩展列并在 SQL 中创建虚拟变量,但是每列都必须手动编码:

SELECT user_id,
CASE WHEN type='credit' THEN amount ELSE 0 END AS credit,
CASE WHEN type='fraud' THEN amount ELSE 0 END AS fraud,
CASE WHEN type='bill' THEN amount ELSE 0 END AS bill
FROM table1
GROUP BY user_id

我确信没有办法在 Redshift 中构建动态 SQL,所以我在 R 中构建了整个查询,然后将其传递给 Redshift:

1. Get all possible values from Type column:  

SELECT disctinct(type) from table1;
2. Create a dynamic query in R and execute it in Redshift.