create table temp(v varchar(50), s varchar(100))
insert into temp values ('颜色','红色,蓝色')
insert into temp values ('规格','XL,XXL,XXXL,IXL')这样一个表,这里只有三行,可能有多行,需要得到这样的8行的结果:
红色,XL
红色,XXL
红色,XXXL
红色,IXL
蓝色,XL
蓝色,XXL
蓝色,XXXL
蓝色,IXL
请问用程序怎么循环得到这个结果?用各种语言都可以,SQL也行吧?SQLC#循环笛卡儿积

解决方案 »

  1.   

    参考public static void ShowResult()
    {
        string str = "X,P|黑色,红色|T,C";
        string[] temp1 = str.Split('|');
        List<string> list = new List<string>();
        foreach (string s in temp1)
        {
            if (list.Count == 0)
                list.AddRange(s.Split(','));
            else
                list = JoinPart(list, s.Split(','));
        }
        foreach (string s in list)
            Console.WriteLine(s);
    }
    public static List<string> JoinPart(List<string> part1, string[] part2)
    {
        List<string> result = new List<string>();
        foreach (string str1 in part1)
        {
            foreach (string str2 in part2)
            {
                result.Add(str1 + " " + str2);
            }
        }
        return result;
    }
      

  2.   

    如果你是在数据库里做,那么cross join就可以了当然你的数据库设计并不利于直接cross join。 你需要先写一个自定义splite表值函数,把字符串转成表,然后cross joinsplite 函数写法:http://www.cnblogs.com/wanglei6051519/archive/2012/07/06/2579079.html
    cross join 的用法http://book.51cto.com/art/200806/77065.htm代码不写了,你了解这两个东西,自己就应该能写出sql的解了