

------解决思路----------------------
行转列~~
TP的不同情况,你自己设定下面的,SET @TP=几,就可以了
动态处理,你参考一下
DECLARE @TP INT
SET @TP=1
DECLARE @SQL VARCHAR(MAX)
SET @SQL='SELECT C.CPDM AS NM,COUNT(DISTINCT C.T_ID)AS QTY'
SELECT @SQL=@SQL+',ISNULL(SUM(CASE ISNULL(A.DM,B.DM) WHEN '''+DM+''' THEN ISNULL(A.zl,B.ZL) END),0)['+DM+']'
FROM(SELECT DM FROM(SELECT DM FROM A UNION ALL SELECT DM FROM B)T1 GROUP BY DM)T2
SET @SQL=@SQL+'FROM C LEFT JOIN A ON C.ID=A.X_ID LEFT JOIN B ON C.ID=B.Y_ID '
SET @SQL=@SQL+'WHERE C.TP='+CAST(@TP AS VARCHAR(10))+' GROUP BY C.CPDM'
EXEC(@SQL)