在SQLite中查询时,是否可以将列中的值拆分为行?
问题描述:
从下面的表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实现这一目标还是有什么其他的建议?
答
比方说,你得到的每个记录作为一个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也有“红色,棕色”,那么它只会将动物与颜色分开,因为你需要在循环内实现相同的逻辑。
显示您的代码以获得更好的帮助 – Vickyexpert
@Vickyexpert现在我不知道该如何完成这项工作。 到目前为止我发现的是使用[从这里]递归(http://*.com/questions/34659643/split-a-string-into-rows-using-pure-sqlite),但我不知道如何将其应用于我的案例。 – Krsnik195
这比SQL更好。 –