2016-09-25 5 views
3

少なくとも2人の患者を10%治療する従業員の給与を引き上げようとしています。私の問題は、給料は、最初に給料が2倍になり、最後に10%掛け算されるということです。例えば、従業員が25.000を獲得し、3人を扱う場合、新しい給与は82.500になります。SQL - Sumコマンドを使用すると、同じ人の給与が倍増する

select distinct t.empNbr, e.Salary, sum(e.Salary*1.1) as NewSalary from Treats t 
inner join Employee e 
on e.empNbr=t.empNbr 
WHERE t.empNbr IN 
(
SELECT empNbr 
    FROM Treats 
    GROUP BY empNbr 
    HAVING COUNT(*) >= 2) 
group by t.empNbr, e.Salary 
+0

サンプルデータを提供します。 – p2k

答えて

1

CROSS気軽には役立つはず:

SELECT e.empNbr, 
     e.Salary, 
     e.Salary*1.1 as NewSalary 
FROM Employee e 
CROSS APPLY (
    SELECT empNbr 
    FROM Treats 
    WHERE e.empNbr = empNbr 
    GROUP BY empNbr 
    HAVING COUNT(*) > 1 
    ) as t 

t部分は我々が必要empNbrを取得します。その後、我々はEmployeeテーブルからempNbrsalaryを選択して、計算を行う:)

もう一つの方法:

SELECT TOP 1 WITH TIES 
         e.empNbr, 
         e.Salary, 
         e.Salary*1.1 as NewSalary 
FROM Employee e 
INNER JOIN Treats t 
    ON e.empNbr = t.empNbr 
ORDER BY 
    CASE WHEN COUNT(t.empNbr) OVER (PARTITION BY t.empNbr ORDER BY t.empNbr) > 1 THEN 1 ELSE 0 END DESC, 
     ROW_NUMBER() OVER (PARTITION BY t.empNbr ORDER BY t.empNbr) 
+0

これは完璧に機能しました、ありがとう! – Christopher

+0

私の喜び!もう1つのソリューションを追加してください。試してみてください。 – gofr1

0

これは適切なクエリです。これはあなたが結果を得るために、クエリの下に使用することができます

select empNbr, Salary, sum(Salary*1.1) as NewSalary 
from employee 
where empNbr in (select empNbr 
       from Treats 
       group by empNbr 
       having count(*) >=2) ----- Ordered as a code 
+0

私はこのエラーが表示されます:列 'empNbr'は集計関数またはGROUP BY句に含まれていないため、選択リストでは無効です。 – Christopher

0


クリストファー、

SELECT t.empNbr, 
    e.Salary, 
    (e.Salary * e.count +(e.Salary/10)) as NewSalary 
from Treats t 
INNER JOIN 
(SELECT empNbr, COUNT(*) AS count Employee GROUP BY empNbr) e 
ON e.empNbr=t.empNbr 
AND e.count >=2 

Explination


1.私たちは、結果を計算することができ


2を持たずに動作するかどうか私に教えてください。内部結合では、empNbrと派生したその従業員の数
3.選択クエリでこのカウントを使用すると、現在の給与に掛けられ、10%が給与で加算されます これはあなたが必要とすることを願っています。すべての問題、適用

関連する問題