2012-02-12 13 views
0

SQL Serverのデータベースでは、お金の恩恵を最大限に活用してthegenderを返そうとしています。したがって、私は、各性別のボーナスの合計を計算するサブクエリと、最大を返す別のサブクエリと、最後にメインクエリはこの最大のジェンダーを返します。しかし、私のコードは動作していません。ネストされたサブクエリを参照するSQL Server

SELECT E.Gender、maxx.mm

FROM HumanResources.Employee as E, 
    (SELECT MAX(Bonus) as mm 
    FROM (SELECT E.Gender, SUM(SP.Bonus) AS Bonus 
      FROM HumanResources.Employee AS E, Sales.SalesPerson AS SP 
      GROUP BY E.Gender) 
    AS gen) AS maxx 

E.Gender = gen.Gender。

最後の行:E.Gender = gen.Genderがgen.Genderとして動作していないよう

どれでも助けをバインドすることはできませんしてください

+0

になりますが、サンプルデータ、所望の結果を示していることはできますか? 'Employee'と' SalesPerson'の間に共通の 'EmployeeID'カラムもありますか?今は悪いクロス結合があります(2つのテーブルがありますが、WHERE句はありません)。 –

答えて

1

私は大ファンではありませんよsubquery(subquery(subquery(モデルの場合、多くの場合、無駄であり、通常は解析/理解/書き換えが困難です。ここで私はそれを見たとき、私が最初にそれを再書きたい方法です: - その月何か

SELECT TOP (1) E.Gender, mm = SUM(SP.Bonus) 
    FROM Sales.SalesPerson AS sp 
    INNER JOIN HumanResources.Employee AS E 
    ON E.EmployeeID = sp.EmployeeID -- guess on relationship 
GROUP BY E.Gender 
ORDER BY mm DESC; 

別の方法をあなたが参加から1人の従業員が、すべてを排除するため、(潜在的に、より効率的、計画に応じて、は)上記起こり、もしない可能性があります。

;WITH sp AS 
(
    SELECT TOP 1 EmployeeID, mm = SUM(Bonus) 
    FROM Sales.SalesPerson 
    GROUP BY EmployeeID 
    ORDER BY mm DESC 
) 
SELECT E.Gender, topsp.mm 
    FROM sp 
    INNER JOIN HumanResources.Employee AS E 
    ON E.EmployeeID = sp.EmployeeID; -- again guessing on relationship 
+0

私は誰かが私のモホークが好きではないと思う。 –

1

は、サブクエリ内にフィルタを入れてください。あなたはそう、内から外のクエリを参照することができます:

AS gen) AS maxx 

AS gen WHERE E.Gender = gen.Gender) AS maxx 
+0

+1また、 'SELECT'リストを' E.Gender'から 'maxx.Gender'に変更する必要があります。しかし、私はネストされたネストされたサブクエリモデルは解析し、とにかく理解するのが難しいと感じています(したがって私の代替提案:-))。 –

関連する問題