oracle行列转换题

应该是行转列的题,但是有一个不同的值变成了1,不会写了
oracle行列转换你可以使用pivot函数,很方便
我是用表连接,聚合函数,case when,(没用行列转换)具体如下
表连接:

我也不知道图片上传成功没,就把代码贴上来
SELECT DISTINCT T1.A,T1.B,T1.C,CO FROM T1214 T1 JOIN (SELECT A,C,COUNT(C) CO FROM T1214 GROUP BY A,C) T2 ON T1.A=T2.A;
就是对A和C进行一个分组计数,如果分组里两个值相等的话(如XX,YY)计数就是2,不然(XY)就是1。然后将它当成一个数据源和原表连接起来再进行一个去重,这样就得到四个字段的表,后面多了一行对C的计数。
然后以表连接所成的表当成一个数据源去查找
最终代码如下(刚开始写博客,还不太会传图,我就直接放代码了)
SELECT A,SUM(B) B,CASE WHEN CO=1 THEN '1' ELSE C END C
FROM (SELECT DISTINCT T1.A, T1.B, T1.C, COFROM T1214 T1JOIN (SELECT A, C, COUNT(C) CO FROM T1214 GROUP BY A, C) T2ON T1.A = T2.A) GROUP BY A,CASE WHEN CO=1 THEN '1' ELSE C END;
按照你的要求就是对B进行求和,当分组A里两个值不同时返回1,相同时返回自身。