当前位置: 代码迷 >> Sql Server >> 有一个表,列比较多,各列值有重复,怎么取出各列不相同的值
  详细解决方案

有一个表,列比较多,各列值有重复,怎么取出各列不相同的值

热度:71   发布时间:2016-04-24 09:06:39.0
有一个表,列比较多,各列值有重复,如何取出各列不相同的值
表结构如下,T,M有对应关系
    T1  T2 T3 T4 M1 M2 M3 M4
1   A    A    A   A   A    B    A    A 
2   A  C   C   C    D   D  C    C

取出  T,M 字段中被修改的字段及数值
显示结果有三列:被修改的字段,原内容,修改后的内容
结果格式显示如下:

被修改的字段    原内容   修改后的内容
        T2                    A                  B
     T1,T2                A,C              D,D



求大神指导,万分感谢。急急急!!!!


------解决思路----------------------
没有什么好的方式,也可以用动态执行
SELECT STUFF(CASE WHEN T.T1<>M.M1 THEN',T1'ELSE''END+CASE WHEN T.T2<>M.M2 THEN ',T2'ELSE''END
+CASE WHEN T.T3<>M.M3 THEN ',T3'ELSE''END+CASE WHEN T.T4<>M.M4 THEN ',T4'ELSE''END,1,1,'')[被修改的字段]
,STUFF(CASE WHEN T.T1<>M.M1 THEN ','+T.T1 ELSE''END+CASE WHEN T.T2<>M.M2 THEN ','+T.T2 ELSE''END
+CASE WHEN T.T3<>M.M3 THEN ','+T.T3 ELSE''END+CASE WHEN T.T4<>M.M4 THEN ','+T.T4 ELSE''END,1,1,'')[原内容]
,STUFF(CASE WHEN T.T1<>M.M1 THEN ','+M.M1 ELSE''END+CASE WHEN T.T2<>M.M2 THEN ','+M.M2 ELSE''END
+CASE WHEN T.T3<>M.M3 THEN ','+M.M3 ELSE''END+CASE WHEN T.T4<>M.M4 THEN ','+M.M4 ELSE''END,1,1,'')[修改后的内容]
FROM T JOIN M ON T.对应字段=M.对应字段

------解决思路----------------------
当看到第二条逗号分隔,我醉了.
还是分两步走吧,既容易看懂,又容易修改
1 查出所有有修改的记录
  select * from table where t1<>m1 or t2<>m2 or t3<>m3 or t4<>m4
2 取出记录后,循环一遍,将有变化的字段名,原值,新值用逗号拼接好.
  相关解决方案