怎么能够根据前两个表的内容生成第三个表的效果呢,
要求:一句语句完成,不用循环游标啥的,而且第三列的内容与第二列的顺序一致
CREATE TABLE t_Order(OrderID INT,DetailID NVARCHAR(16))
CREATE TABLE t_OrderDetail(DetailID NVARCHAR(4),Pruduct NVARCHAR(16))INSERT INTO t_Order
SELECT 1,'A,B,C' UNION
SELECT 2,'A,B' UNION
SELECT 3,'A,C' UNION
SELECT 4,'B,C'INSERT INTO t_OrderDetail
SELECT 'A','苹果' UNION
SELECT 'B','桔子' UNION
SELECT 'C','梨' UNION
SELECT 'D','香蕉'SELECT * FROM t_Order
SELECT * FROM t_OrderDetailDROP TABLE t_Order
DROP TABLE t_OrderDetail
SELECT 1 AS OrderID,'A,B,C' AS DetailID,'苹果,桔子,梨' AS Pruduct UNION
SELECT 2,'A,B','苹果,桔子' UNION
SELECT 3,'A,C','苹果,梨' UNION
SELECT 4,'B,C','桔子,梨'

解决方案 »

  1.   

    SELECT A.OrderID,A.DetailID,
      Pruduct=STUFF((SELECT ','+Pruduct FROM t_OrderDetail WHERE CHARINDEX(','+DetailID+',',','+A.DetailID+',')>0 FOR XML PATH('')),1,1,'')
    FROM t_Order A
    GROUP BY A.OrderID,A.DetailID
      

  2.   

    我现在用的也是这个方法,但是如果t_Order表中有'B,A'这样的记录的时候顺序就不对了,所以问有没有更合适的办法,不过还是谢谢josy了
      

  3.   

    加个排序
    SELECT A.OrderID,A.DetailID,
      Pruduct=STUFF((SELECT ','+Pruduct FROM t_OrderDetail WHERE CHARINDEX(','+DetailID+',',','+A.DetailID+',')>0 ORDER BY CHARINDEX(','+DetailID+',',','+A.DetailID+',') FOR XML PATH('')),1,1,'')
    FROM t_Order A
    GROUP BY A.OrderID,A.DetailID
      

  4.   

    我可能没说清楚,不是整个表的顺序,是生成的第三个表中的Product字段中产品的顺序要与对应记录中的DetailID一致,不知道有没有办法