2016-09-16 57 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也有「紅色,棕色」,那麼它只會將動物與顏色分開,因爲你需要在循環內實現相同的邏輯。

相關問題