解决方案 »

  1.   

    SELECT 'V1' REMARKS,
            B1.UID,
           (SELECT IF(B.V1<>0,A.ATTR1,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR1')ATTR1,
           (SELECT IF(B.V1<>0,A.ATTR2,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR2')ATTR2
    FROM( SELECT DISTINCT UID FROM B)B1
    UNION ALL
    SELECT 'V2' REMARKS,
            B1.UID,
           (SELECT IF(B.V2<>0,A.ATTR1,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR1')ATTR1,
           (SELECT IF(B.V2<>0,A.ATTR2,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR2')ATTR2
    FROM( SELECT DISTINCT UID FROM B)B1
    ORDER BY UID,REMARKS
      

  2.   

    SELECT 'V1' REMARKS,
            B1.UID,
           (SELECT IF(B.V1<>0,A.ATTR1,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR1')ATTR1,
           (SELECT IF(B.V1<>0,A.ATTR2,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR2')ATTR2
    FROM( SELECT DISTINCT UID FROM B)B1
    UNION ALL
    SELECT 'V2' REMARKS,
            B1.UID,
           (SELECT IF(B.V2<>0,A.ATTR1,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR1')ATTR1,
           (SELECT IF(B.V2<>0,A.ATTR2,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR2')ATTR2
    FROM( SELECT DISTINCT UID FROM B)B1
    ORDER BY UID,REMARKS

    测试后确实满足需求,多谢!