肯定是可以的.但是需要注意关联的字段.前几天我也写报表.用了好几个临时表.汗......SET NOCOUNT ON;
USE ERPDATADECLARE @STARTTIME DATETIME,@ENDTIME DATETIME
SET @STARTTIME = '2008-01-01'
SET @ENDTIME = '2009-01-01'--送货单数据.含送货地址.送货客户.物料编号
SELECT  D.MTLID,M.SHIPTONAME,M.STADDR,M.DELIVERYNO,D.SPECID,D.SPECNAME,D.ORDERNO
INTO #MIS_HD_TEMP_Delivery
FROM SO_DeliveryMaster M, SO_DeliveryDETAIL D 
WHERE M.DELIVERYNO = D.DELIVERYNO
AND M.STATUS <> 'CANCEL' AND M.CREATETIME >=@STARTTIME AND M.CREATETIME <=@ENDTIME--根据物料编号获取产品类型
SELECT OBJID,D.MAINTYPENAME,M.CPID,M.CPNAME
INTO #MIS_HD_TEMP_PRODUCT_TYPE
FROM SKM_CPMASTER M ,SKM_MTLTYPE D 
WHERE M.OBJID = D.MAINTYPECODE AND D.KINDTYPE = 'BASE' AND D.MTLOBJECTCODE = 'SKManage.CatalogCP'
--获取工程单数据.工单号.交期
SELECT  M.JOBNO,M.MAKETYPENAME,M.ORDERNO,M.QTY,M.CREATETIME,COALESCE(M.CONFIRMTIME,M.CREATETIME) AS CONFIRMTIME,COALESCE(M.LOSSCONFIRMTIME,COALESCE(M.CONFIRMTIME,M.CREATETIME)) AS LOSSCONFIRMTIME,COMPLETETIME
INTO #MIS_HD_TEMP_JOBNO
FROM SO_DeliveryDETAIL D,PM_JOBMASTER M 
WHERE M.ORDERNO = D.ORDERNO 
AND M.STATUS = 'COMPLETE' AND COMPLETETIME BETWEEN @STARTTIME AND @ENDTIME AND M.MEMO NOT LIKE N'%形式%'
AND ((JOBNO LIKE 'DPN%' AND ISNULL(PAJOBNO,'')='') OR (JOBNO LIKE 'VPN%'))
--获取最终的送货方式和地址
SELECT M.REQUESTFAXNO,M.REQUESTTYPENAME,D.DELIVERYNO,M.CUSTOMERNAME,M.CUSTOMERADDRESS,M.[SUM]
INTO #MIS_HD_TEMP_ADDRESS
FROM TP_RequestFaxMaster M,TP_RequestFaxDETAIL D 
WHERE M.REQUESTFAXNO = D.REQUESTFAXNO AND M.STATUS <> 'CANCEL' AND M.CREATETIME >=@STARTTIME AND M.CREATETIME <=@ENDTIME
--弄张总的数据
SELECT *
INTO  #MIS_HD_TEMP_PRODUCT_TYPE_LAST
FROM(
SELECT DISTINCT  C.JOBNO,C.MAKETYPENAME,A.ORDERNO,D.REQUESTFAXNO,A.DELIVERYNO,A.SPECNAME,A.MTLID,A.SHIPTONAME,A.STADDR,D.CUSTOMERADDRESS,B.MAINTYPENAME,C.QTY,C.LOSSCONFIRMTIME,C.COMPLETETIME,D.REQUESTTYPENAME,D.[SUM],0 AS NEEDDATES,CAST('' AS NVARCHAR(50)) AS YEWUZU
FROM #MIS_HD_TEMP_Delivery A, #MIS_HD_TEMP_PRODUCT_TYPE B,#MIS_HD_TEMP_JOBNO C,#MIS_HD_TEMP_ADDRESS D
WHERE A.MTLID = B.CPID AND A.ORDERNO = C.ORDERNO AND A.DELIVERYNO = D.DELIVERYNO 
) AS TEMP--删除临时表
DROP TABLE  #MIS_HD_TEMP_Delivery
DROP TABLE  #MIS_HD_TEMP_PRODUCT_TYPE
DROP TABLE  #MIS_HD_TEMP_JOBNO
DROP TABLE  #MIS_HD_TEMP_ADDRESS--更新数据
UPDATE #MIS_HD_TEMP_PRODUCT_TYPE_LAST SET NEEDDATES = (CASE WHEN DATEPART(HH,LOSSCONFIRMTIME)>=18 OR (DATEPART(HH,LOSSCONFIRMTIME)>=17 AND DATEPART(MINUTE,LOSSCONFIRMTIME)>30) THEN DATEDIFF(DAY,LOSSCONFIRMTIME ,COMPLETETIME) ELSE DATEDIFF(DAY,LOSSCONFIRMTIME ,COMPLETETIME)+1 END)
UPDATE A SET A.YEWUZU = SysData.DBO.FN_GetBaseName(B.BUSGROUP,'ChineseGB') FROM #MIS_HD_TEMP_PRODUCT_TYPE_LAST A, SO_ORDERMASTER B WHERE A.ORDERNO = B.ORDERNO--得到统计信息
SELECT YEWUZU,MAINTYPENAME,SUM(QTY) AS TOTALQTY,SUM(NEEDDATES)/COUNT(JOBNO) AS AVGNEEDDATES
FROM #MIS_HD_TEMP_PRODUCT_TYPE_LAST
GROUP BY YEWUZU,MAINTYPENAME
ORDER BY YEWUZU,MAINTYPENAME--获取明细
SELECT A.*,B.PRICE FROM #MIS_HD_TEMP_PRODUCT_TYPE_LAST A LEFT JOIN SO_ORDERDETAIL B ON A.ORDERNO = B.ORDERNO AND A.MTLID = B.MTLID--删除最后一张临时表
DROP TABLE  #MIS_HD_TEMP_PRODUCT_TYPE_LASTSET NOCOUNT OFF;