如何在SQL中创建动态虚拟变量

时间:2014-09-30 14:11:37

标签: sql r teradata reshape

我有一个包含2列的简单表:ID(整数)和Category(字符串),每个ID可以重复几个类别,如下所示:

ID    Cat
---   ---
1     A
1     B
2     B
3     A
3     B
3     C

我想重塑这个表,以便每个唯一的类别都是一个虚拟变量(如果ID有,则为0/1):

ID    A   B   C
---   --  --  --
1     1   1   0
2     0   1   0
3     1   1   1

现在,如果已知(和小)这组唯一类别,则这是一个简单的CASE WHEN语句x no。独特的类别。

我的问题是:

a)如果它不是未知或真的很大怎么办?如何自动创建“CASE WHEN”效果?

b)更重要的是:我不一定对所有类别感兴趣(仅说'A'和'B'的假人),但只有我在一个名为Cats的单独表中的类别,这是一个简单的1列保持我的相关类别(再次,未知有多少),如:

 Cat
 ---
 A
 B

如何仅为此动态表中的类别创建虚拟变量?

你认为所有这一切都应该在其他工具中完成,例如R'

谢谢!

(我正在使用带有SQLA的Teradata SQL,但我认为这是一个普遍的SQL问题)

1 个答案:

答案 0 :(得分:2)

只需使用table

table(dat)
   Cat
ID  A B C
  1 1 1 0
  2 0 1 0
  3 1 1 1

如果你想拥有一组Cat的二进制表:

table(subset(dat,Cat %in% c('A','B')))
   Cat
ID  A B
  1 1 1
  2 0 1
  3 1 1