2016-09-16 61 views
1

从下面的表A中,我想从列Color中拆分值,然后用它生成新行。我想要的结果显示在下面的表格结果 中。在SQLite中查询时,是否可以将列中的值拆分为行?

表A

Animal | Gender | Color 
-------|--------|--------------------- 
Cat | Male | White, Black, Brown 
Cat | Female | White 
Dog | Male | Black, Yellow 
Dog | Female | Black

表结果

Animal | Gender | Color 
-------|--------|--------------------- 
Cat | Male | White 
Cat | Male | Black 
Cat | Male | Brown 
Cat | Female | White 
Dog | Male | Black 
Dog | Male | Yellow 
Dog | Female | Black 

我如何使用SQLite实现这一目标还是有什么其他的建议?

+0

显示您的代码以获得更好的帮助 – Vickyexpert

+0

@Vickyexpert现在我不知道该如何完成这项工作。 到目前为止我发现的是使用[从这里]递归(http://stackoverflow.com/questions/34659643/split-a-string-into-rows-using-pure-sqlite),但我不知道如何将其应用于我的案例。 – Krsnik195

+0

这比SQL更好。 –

回答

2

比方说,你得到的每个记录作为一个String作为我在下面所提到并从那里你可以分割的所有数据如下:

创建一个类,其中包含像动物,颜色和性别作为下面的所有属性

class AnimalData   // You can give any name 
    { 
     String strAnimal, strGender, strColor; 

     public AnimalData(String strAnimal, String strGender, String strColor) 
     { 
      this.strAnimal = strAnimal; 
      this.strGender = strGender; 
      this.strColor = strColor; 
     } 

     public String getStrAnimal() 
     { 
      return strAnimal; 
     } 

     public String getStrGender() 
     { 
      return strGender; 
     } 

     public String getStrColor() 
     { 
      return strColor; 
     } 
    } 

现在目前我使用的如上你从数据库中获取包含数据3静态变量,你需要以下变量

01,而不是使用它们的这些
String strAnimalData[] = {"Cat","Cat","Dog","Dog"}; 
    String strGenderData[] = {"Male","Female","Male","Female"}; 
    String strColorData[] = {"White,Black,Brown","White","Black,Yellow","Black"}; 

我现在用的一个方法,它会给我造成单从以上数据

public List<AnimalData> getAllAnimalData() 
{ 
     List<AnimalData> strAllAnimalData = new ArrayList<>(); 

     for(int i = 0; i < strAnimalData.length; i++) 
     { 
      if(strAnimalData[i].indexOf(",") > 0) 
      { 
       String strSubAnimalData[] = strAnimalData[i].split(","); 

       for(int j = 0; j < strSubAnimalData.length; j++) 
       { 
        AnimalData ad = new AnimalData(strSubAnimalData[j], strGenderData[i], strColorData[i]); 
        strAllAnimalData.add(ad); 
       } 
      } 
      else if(strGenderData[i].indexOf(",") > 0) 
      { 
       String strSubGenderData[] = strGenderData[i].split(","); 

       for(int j = 0; j < strSubGenderData.length; j++) 
       { 
        AnimalData ad = new AnimalData(strAnimalData[i], strSubGenderData[j], strColorData[i]); 
        strAllAnimalData.add(ad); 
       } 
      } 
      else if(strColorData[i].indexOf(",") > 0) 
      { 
       String strSubColorData[] = strColorData[i].split(","); 

       for(int j = 0; j < strSubColorData.length; j++) 
       { 
        AnimalData ad = new AnimalData(strAnimalData[i], strGenderData[i], strSubColorData[j]); 
        strAllAnimalData.add(ad); 
       } 
      } 
      else 
      { 
       AnimalData ad = new AnimalData(strAnimalData[i], strGenderData[i], strColorData[i]); 
      strAllAnimalData.add(ad); 
      } 
     } 

     // Below code is just for Display Data 

     for(AnimalData tempData: strAllAnimalData) 
     { 
      System.out.println("\t" + tempData.getStrAnimal() + "\t" + tempData.getStrGender() + "\t" + tempData.getStrColor()); 
     System.out.println("\n"); 
    } 
} 

注: -目前,这会在每个位置只有一个变量有多个数据的工作,像如果动物在位置1有“猫,狗”,颜色在位置1也有“红色,棕色”,那么它只会将动物与颜色分开,因为你需要在循环内实现相同的逻辑。

相关问题