0

計算列を SELECT ステートメントに追加するまでは、正常に実行される SQL Server クエリがあります。その後、奇妙な SQL Server エラーが発生します。

SQLは次のとおりです。

SELECT
    outmail_.MessageID_, 
    CONVERT(VARCHAR(10),outmail_.Created_,120) AS 'Issue', 
    lyrReportSummaryData.mailed, 
    lyrReportSummaryData.successes, 
    COUNT(*) AS 'opens',
    COUNT(DISTINCT clicktracking_.MemberID_) AS 'unique_opens', 
    convert(decimal(3,1),((convert(float,[unique_opens]))/[successes]) * 100) AS 'Rate'
FROM 
    outmail_ 
RIGHT JOIN 
    clicktracking_ ON clicktracking_.MessageID_ = outmail_.MessageID_
RIGHT JOIN 
    lyrReportSummaryData ON lyrReportSummaryData.id = clicktracking_.MessageID_ 
GROUP BY  
    outmail_.MessageID_, CONVERT(VARCHAR(10), outmail_.Created_,120), 
    lyrReportSummaryData.mailed, lyrReportSummaryData.successes

問題は、で始まる行convert(decimal ... です。含まれていると、次のエラーが発生します。

エラー 8120: 列 'lyrReportSummaryData.unique_opens' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

エラーを句で使用する方法がわからないため、エラーを解決する方法がわかりませんGROUP BY(そうする必要はないようです)。

続行する方法について何か提案はありますか? ありがとう。

4

1 に答える 1

2

私よりも優れたDBAスキルを持つ人が、これを行うためのより効率的な方法を指摘できると確信していますが...

クエリの大部分をサブクエリとして実行すると、サブクエリの結果に対して計算を実行できます。

 SELECT 
    MessageID_, 
    Issue, 
    mailed, 
    successes, 
    opens, 
    unique_opens, 
    convert(decimal(3,1),((convert(float,[unique_opens]))/[successes]) * 100) AS 'Rate'

 FROM 
 (SELECT
      outmail_.MessageID_, 
      CONVERT(VARCHAR(10),outmail_.Created_,120) AS 'Issue', 
      lyrReportSummaryData.mailed, 
      lyrReportSummaryData.successes, 
      COUNT(*) AS 'opens',
      COUNT(DISTINCT clicktracking_.MemberID_) AS 'unique_opens'


    FROM outmail_ 
    RIGHT JOIN clicktracking_ ON clicktracking_.MessageID_ = outmail_.MessageID_
    RIGHT JOIN lyrReportSummaryData ON lyrReportSummaryData.id = clicktracking_.MessageID_ 

    GROUP BY  outmail_.MessageID_, CONVERT(VARCHAR(10), outmail_.Created_,120), lyrReportSummaryData.mailed, lyrReportSummaryData.successes
   ) subquery /* was 'g' */

これが実質的に行うことは、グループ化を実行し、それに基づいて後で計算を行うことです。

サブクエリにはエイリアスを指定する必要があります (この例では「サブクエリ」) - そのエイリアス名を使用しない場合でも。

于 2012-06-21T00:57:46.927 に答える