SQL中列出的结果

时间:2015-04-23 03:32:59

标签: sql r teradata

我有一个csv格式的SQL数据集,这是表/数据结构。

Order ID     Items
O1            Beer
O1            Wine
O2            Beer
O2            Wine
O3            Beer
O4            Chips

我需要将R中的这个转换为以下格式

O1 Beer,Wine
O3 Beer,Chips 

感谢任何帮助。

我尝试了以下内容:

# MOCK DAtA
o1 <- c("beer","Wine")
o2 <- c("beer","Wine")
o3 <- c("beer","Chips")
o4 <-c("Curd","chips")
o5 <-c("beer")
o6<-c("Wine")
o7 <-c("fruits")
o8<- c("wine","Cheese")

order <- list(o1,o2,o3,o4,o5,o6,o7,o8)

library(Arules)

dt <- as (order,"transactions")
  • 输出:

    str(order)
    List of 8
     $ : chr [1:2] "beer" "Wine"
     $ : chr [1:2] "beer" "Wine"
     $ : chr [1:2] "beer" "Chips"
     $ : chr [1:2] "Curd" "chips"
     $ : chr "beer"
     $ : chr "Wine"
     $ : chr "fruits"
     $ : chr [1:2] "wine" "Cheese"
    
    str(dt)
     Formal class 'transactions' [package "arules"] with 4 slots
      ..@ transactionInfo:'data.frame': 0 obs. of  0 variables
      ..@ data           :Formal class 'ngCMatrix' [package "Matrix"] with 5                     
    

注意:我无法在SQL中更改此内容,因为我有800K行。

1 个答案:

答案 0 :(得分:0)

你可以做一件事。您发布的第一个表格内容包含订单ID和项目。您可以将它们插入到工作表中,在工作表中添加第三列,该列将存储记录的DENSE_RANK(),通过partition by子句按顺序保存组ID,按Item排序。加载此表后。您可以简单地使用此声明。 BSON等等。但这有一个缺点,您必须知道任何订单中将出现的最大项目数。

如果您的数据库中的XML函数运行正常,您可以使用下面的子句(这将克服先前方法的缺点,但您需要确保此命令运行正常)

COALESCE(MAX((CASE rank_col WHEN 1 THEN items END)),'')  || ',' || COALESCE(MAX((CASE rank_col WHEN 2 THEN items END)),'')   || ',' ||。希望这会有所帮助。

由于 Aritra