-1

最初の選択により、countOfActivePlansにデータが入力されます。

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

2番目の選択では、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

3番目は、Approved、Denied、および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
4

1 に答える 1

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

最初の例が完璧でない場合は申し訳ありませんが、これが役立つことを願っています。正直なところ、質問の各クエリを関数に入れ、上記のスタイルで各関数を呼び出したくなるでしょう。

于 2013-03-08T15:28:54.177 に答える