我有一个像下面的表。
|FILE| ID |PARENTID|SHOWCHILD|CAT1|CAT2|CAT3|TOTAL| |F1 | A1 | P1 | N | 3 | 2 | 6 | 11 | |F2 | A2 | P2 | N | 4 | 7 | 3 | 14 | |F3 | A3 | P1 | N | 3 | 1 | 1 | 5 | |F4 | LG1| | Y | 6 | 3 | 7 | 16 | |F5 | LG2| | Y | 4 | 7 | 3 | 14 |
现在,是否有可能,我只想为showChild为’Y’的行找到cat1,cat2,cat3和total的总计(即)汇总,并将其添加到结果集中。
|小孩| RES | RES | N | 10 | 10 | 10 | 30 |
预期最终产量:
|FILE| ID |PARENTID|SHOWCHILD|CAT1|CAT2|CAT3|TOTAL| |F1 | A1 | P1 | N | 3 | 2 | 6 | 11 | |F2 | A2 | P2 | N | 4 | 7 | 3 | 14 | |F3 | A3 | P1 | N | 3 | 1 | 1 | 5 | |F4 | LG1| | Y | 6 | 3 | 7 | 16 | |F5 | LG2| | Y | 4 | 7 | 3 | 14 | |Tot | Res| Res | N | 10 | 10 | 10 | 30 |
在这里,我仅在考虑将showchild为’Y’的行之后添加了Tot行(最后一行),并将其添加到了结果集中。
我正在尝试不使用UNION的解决方案
在实现上述结果方面的任何帮助均受到高度赞赏。
谢谢你。
一种方法是使用联合:
WITH cte AS ( SELECT "FILE", ID, PARENTID, SHOWCHILD, CAT1, CAT2, CAT3, TOTAL, 1 AS position FROM yourTable UNION ALL SELECT 'Tot', 'Res', 'Res', 'N', SUM(CAT1), SUM(CAT2), SUM(CAT3), SUM(TOTAL), 2 FROM yourTable WHERE SHOWCHILD = 'Y' ) SELECT "FILE", ID, PARENTID, SHOWCHILD, CAT1, CAT2, CAT3, TOTAL FROM cte ORDER BY position, "FILE";