2013-03-08 47 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