如何在sql server中从以前的选择生成报表

ih99xse1  于 2023-02-03  发布在  SQL Server
关注(0)|答案(1)|浏览(139)

定期我需要根据数据库中的一些数据生成报告。
第一个选择是:

SELECT DISTINCT
                 A.PRO_C_NOME,
                 B.ETS_C_NOME        
                FROM WETI_ETAPA_ITEM F   
                 INNER JOIN WETE_ETAPA_ITEM_EDITORS E   
                  ON E.ETE_N_ETI_N_CODIGO = F.ETI_N_CODIGO   
                 INNER JOIN WETA_ETAPA_PROCESSO H   
                  ON H.ETA_N_CODIGO = F.ETI_N_ETA_N_CODIGO   
                 INNER JOIN WIPR_ITEM_PROCESSO C   
                  ON C.IPR_N_CODIGO = F.ETI_N_IPR_N_CODIGO   
                 INNER JOIN WIWF_ITEM_WORKFLOW D  
                  ON D.IWF_N_CODIGO = C.IPR_N_IWF_N_CODIGO  
                 INNER JOIN WPRO_PROCESSO A    
                  ON A.PRO_N_CODIGO = C.IPR_N_PRO_N_CODIGO AND PRO_N_DELETED = 0  
                 LEFT OUTER JOIN WISP_ITEM_SUBPROCESS G    
                  ON G.ISP_N_ID = F.ETI_ISP_N_ID
                 INNER JOIN WETS_ETAPA_SLA B
                  ON F.ETI_N_ETS_N_CODIGO = B.ETS_N_CODIGO

返回如下内容:
| C1|C2|
| - ------|- ------|
| A类|1个|
| A类|1个|
| A类|三个|
| 乙|第二章|
| 乙|第二章|
| 乙|第二章|
| 乙|三个|
| 乙|三个|
| 乙|三个|
| C级|1个|
| C级|第二章|
我需要从第一个选择返回类似这样的报告:
| 第一节|第二节|第三节|第四节|
| - ------|- ------|- ------|- ------|
| A类|第二章|无|1个|
| 乙|无|三个|三个|
| C级|1个|1个|无|
即:
S.1-与C1不同的值
S.2-为S.1值在C2中计数1个值
S.3-在C2中为S.1值计数2个值
S.4-针对S.1值在C2中计数3个值
有人能帮我解决这个问题吗?
我尝试了许多解决方案,比如使用临时表和从另一个select中选择,但是由于不同的原因根本不起作用。

8gsdolmq

8gsdolmq1#

;with cte(PRO_C_NOME, ETS_C_NOME)  as (
SELECT DISTINCT
                 A.PRO_C_NOME,
                 B.ETS_C_NOME        
                FROM WETI_ETAPA_ITEM F   
                 INNER JOIN WETE_ETAPA_ITEM_EDITORS E   
                  ON E.ETE_N_ETI_N_CODIGO = F.ETI_N_CODIGO   
                 INNER JOIN WETA_ETAPA_PROCESSO H   
                  ON H.ETA_N_CODIGO = F.ETI_N_ETA_N_CODIGO   
                 INNER JOIN WIPR_ITEM_PROCESSO C   
                  ON C.IPR_N_CODIGO = F.ETI_N_IPR_N_CODIGO   
                 INNER JOIN WIWF_ITEM_WORKFLOW D  
                  ON D.IWF_N_CODIGO = C.IPR_N_IWF_N_CODIGO  
                 INNER JOIN WPRO_PROCESSO A    
                  ON A.PRO_N_CODIGO = C.IPR_N_PRO_N_CODIGO AND PRO_N_DELETED = 0  
                 LEFT OUTER JOIN WISP_ITEM_SUBPROCESS G    
                  ON G.ISP_N_ID = F.ETI_ISP_N_ID
                 INNER JOIN WETS_ETAPA_SLA B
                  ON F.ETI_N_ETS_N_CODIGO = B.ETS_N_CODIGO
)

    SELECT PRO_C_NOME AS 'S.1'
       ,SUM(CASE WHEN ETS_C_NOME=1 THEN 1 ELSE 0 END) AS 'S.2'
       ,SUM(CASE WHEN ETS_C_NOME=2 THEN 1 ELSE 0 END) AS 'S.3'
       ,SUM(CASE WHEN ETS_C_NOME=3 THEN 1 ELSE 0 END) AS 'S.4'
    FROM cte
    GROUP BY PRO_C_NOME

相关问题