2013-03-08 45 views
-1

第一选择填充countOfActivePlans:INESRT到表从三个SELECT语句

SELECT COUNT(DISTINCT a.txtprogram) AS countOfActivePlans, c.txtLevel1 
FROM tblOfferings a, tblClaims b, tblRetailers c 
WHERE a.ysnActive=1 
     AND c.intRetailer=b.intRetailer 
     AND c.intRetailer=a.intRetailer 
GROUP BY c.txtLevel1 
ORDER BY c.txtLevel1 

的第二选择填充plansWithActivity:

SELECT COUNT(DISTINCT a.txtProgram) AS plansWithActivity, c.txtLevel1 
FROM tblClaims a, tblOfferings b, tblRetailers 
WHERE a.intOffering=b.intOffering 
     AND c.intRetailer=a.intRetailer 
     AND c.intRetailer=b.intRetailer 
GROUP BY c.txtlevel1 
ORDER BY c.txtLevel1 

批准第三填充,被拒绝,和sumOfcurPaid:

SELECT COUNT(a.dblTransaction) AS invoicesSubmitted, SUM(curPaid) AS sumOfcurPaid, b.txtLevel1, 
     CASE WHEN a.intTransCode=0 THEN 'Denied' 
      WHEN a.intTransCode=1 THEN 'Approved' 
      ELSE 'Reissued' 
     END AS txtLabel 
FROM tblClaims a, tblRetailers b, tbLTransCode c 
WHERE a.intRetailer=b.intRetailer 
     AND a.intTransCode=c.intTransCode 
GROUP BY b.txtLevel1, 
     CASE WHEN a.intTransCode=0 THEN 'Denied' 
      WHEN a.intTransCode=1 THEN 'Approved' 
      ELSE 'Reissued' 
     END 
ORDER BY b.txtLevel1 asc 

下表。

我怎样才能使这一个INSERT填充表?

Area countOfActivePlans plansWithActivity approved denied sumOfCurPaid 
----------------------------------------------------------------------------- 
CE 237    230     89898  11438 1238152.858 
NE 189    178     54159  5667 1665176.757 
SE 177    165     58675  5873 1406241.758 
SW 118    111     32450  6934 1329101.503 
WE 152    145     40266  3473 529956.6875 
+0

txtLevel1是否持有区号? – peterm 2013-03-08 15:49:43

回答

2
INSERT INTO 
    MyTable (Area,countOfActivePlans,plansWithActivity,approved,denied,sumOfCurPaid) 
SELECT 
    f1.Area, f2.countOfActivePlans, f3.plansWithActivity, f4.Approved, f4.Denied, f4.sumOfcurPaid, 
FROM 
    (SELECT [THAT GETS THE AREA])   AS f1 
CROSS JOIN 
    (SELECT COUNT(DISTINCT a.txtprogram) AS countOfActivePlans, c.txtLevel1 
    FROM tblOfferings a, tblClaims b, tblRetailers c 
    WHERE a.ysnActive=1 
     AND c.intRetailer=b.intRetailer 
     AND c.intRetailer=a.intRetailer 
    GROUP BY c.txtLevel1 
    ORDER BY c.txtLevel1)   AS f2 
CROSS JOIN 
    (SELECT COUNT(DISTINCT a.txtProgram) AS plansWithActivity, c.txtLevel1 
    FROM tblClaims a, tblOfferings b, tblRetailers c 
    WHERE a.intOffering=b.intOffering 
     AND c.intRetailer=a.intRetailer 
     AND c.intRetailer=b.intRetailer 
    GROUP BY c.txtlevel1 
    ORDER BY c.txtLevel1) AS f3 
CROSS JOIN 
    (SELECT COUNT(a.dblTransaction) AS invoicesSubmitted, SUM(curPaid) AS sumOfcurPaid, b.txtLevel1, 
    CASE WHEN a.intTransCode=0 THEN 'Denied' 
     WHEN a.intTransCode=1 THEN 'Approved' 
     ELSE 'Reissued' 
    END AS txtLabel 
    FROM tblClaims a, tblRetailers b, tbLTransCode c 
    WHERE a.intRetailer=b.intRetailer 
    AND a.intTransCode=c.intTransCode 
    GROUP BY b.txtLevel1, 
    CASE WHEN a.intTransCode=0 THEN 'Denied' 
     WHEN a.intTransCode=1 THEN 'Approved' 
     ELSE 'Reissued' 
    END 
    ORDER BY b.txtLevel1 asc)   AS f4 

我认为这将是不错,但我已经包含下面只是柜面的基本思路我得到了一些代码错误之上。

INSERT INTO 
    MyTable (Col1,Col2,Col3,Col4,Col5,Col6) 
SELECT 
    f1.col1, f2.col2, f3.col3, f4.col4, f4.col5, f4.col6 
FROM 
    (SELECT Col1 FROM QUERYWITHAREA) AS f1 
CROSS JOIN 
    (SELECT Col2 FROM QUERY1)   AS f2 
CROSS JOIN 
    (SELECT Col3 FROM QUERY2)   AS f3 
CROSS JOIN 
    (SELECT Col4,Col5,Col6 FROM QUERY3) AS f4 

希望这会有所帮助,对不起,如果第一个例子是不完美的,它是一个指南,以帮助你。说实话,我会试图将你的问题中的每个查询放入一个函数中,并按上面的样式调用每个函数。

+0

好解释 – 2013-03-08 15:41:30

+0

@MuhammadUsman - 谢谢 – 2013-03-08 15:44:17

+0

经过几次修复后,我得到以下错误消息107,级别16,状态2,行1 列前缀'c'与表中使用的表名或别名不匹配查询。 消息107,级别16,状态2,行1 列前缀'c'与查询中使用的表名或别名不匹配。 消息107,级别16,状态2,行1 列前缀'c'与查询中使用的表名或别名不匹配。 – 2013-03-08 15:52:40