27,579
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('tempdb..#tmpA') IS NOT NULL DROP TABLE #tmpA
IF OBJECT_ID('tempdb..#tmpB') IS NOT NULL DROP TABLE #tmpB
IF OBJECT_ID('tempdb..#tmpC') IS NOT NULL DROP TABLE #tmpC
CREATE TABLE #tmpA (ID INT,CGNO VARCHAR(20),GYSID VARCHAR(20),CREATEDATE DATE)
INSERT INTO #tmpA (ID,CGNO,GYSID,CREATEDATE)
VALUES (1,'CG18001','GYS1','2018-02-04'),(2,'CG18002','GYS2','2018-03-07')
CREATE TABLE #tmpB (PARID INT,ITEMNO VARCHAR(20),CGQTY INT, CGPRICE DECIMAL(18,2),CGAMT DECIMAL(18,2),BATCHNO VARCHAR(20))
INSERT INTO #tmpB (PARID, ITEMNO, CGQTY, CGPRICE, CGAMT, BATCHNO)
VALUES (1,'SP1801001',1000,20,20000,'Track18001'),(2,'SP1801001',300,30,9000,'Track18001')
CREATE TABLE #tmpC (BATCHNO VARCHAR(20),ITEMNO VARCHAR(20),OUTQTY INT)
INSERT INTO #tmpC (BATCHNO,ITEMNO,OUTQTY)
VALUES ('Track18001','SP1801001',500)
IF OBJECT_ID('tempdb..#tmpD') IS NOT NULL DROP TABLE #tmpD
SELECT b.BATCHNO,b.ITEMNO,SUM(b.CGAMT)*1.0/SUM(b.CGQTY) AS avg_price,SUM(b.CGAMT) AS CGAMT,SUM(b.CGQTY) AS CGQTY
INTO #tmpD
FROM #tmpB b
GROUP BY b.BATCHNO,b.ITEMNO
;WITH a AS (
SELECT b.BATCHNO,b.ITEMNO,a.GYSID
FROM #tmpB b
INNER JOIN #tmpA a ON b.PARID=a.ID
)
, b AS (
SELECT BATCHNO,ITEMNO
,(
SELECT GYSID+',' FROM a
WHERE BATCHNO=t.BATCHNO AND ITEMNO=t.ITEMNO
FOR XML PATH('')
) AS GYSID
FROM a AS t
GROUP BY BATCHNO,ITEMNO
)
SELECT b.GYSID,d.BATCHNO,d.ITEMNO,d.avg_price,c.OUTQTY,d.CGAMT*1.0/d.CGQTY*c.OUTQTY AS OUTAMT
FROM #tmpD d
LEFT JOIN #tmpC c ON c.BATCHNO=d.BATCHNO AND c.ITEMNO=d.ITEMNO
INNER JOIN b ON d.BATCHNO=b.BATCHNO AND d.ITEMNO=b.ITEMNO
拿去试试,下次最好有样张数据直接用文本贴出来,省事很多