2016-08-04 5 views
3

私はEmp_salary名のテーブルを持っています。次のデータと条件のSQLクエリが必要です

表データ

id name Slry 
1 Ram  1500 
2 janak 500 
3 Anuj 400 
4 Hardik 2000 
5 Amit 2500 
6 Atul 3000 
7 Rahul 3500 
8 Jay  4000 
9 Parth 1500 
10 Lalit 600 
11 Ramesh 5000 

私Queのはです:私は、WHERE条件内でEMPの名前を渡します。 そして私はすべてのEmpが出てくるようにO/Pが欲しいです給与はEmpの給料よりも少ないです(条件が合ったところでパスしました)

Ex。

私はO アトゥールを渡すとO/Pは「サブクエリ」または「機能」を使用しないでください

name Slry     name Slry 
janak 500      janak 500 
Anuj 400      Anuj 400 
Lalit 600      Lalit 600 
           Ram  1500 
           Hardik 2000 
           Amit 2500 
           Atul 3000 
           Parth 1500 

のようになりますように/ Pがなるラリットを渡す場合 私はそれのための単純なSQLクエリだけが必要です。あなたが非平等を使用することができます

答えて

0

参加:

WITH Src AS 
(
    SELECT * FROM (VALUES 
    (1 , 'Ram ', 1500), 
    (2 , 'janak ', 500), 
    (3 , 'Anuj ', 400), 
    (4 , 'Hardik', 2000), 
    (5 , 'Amit ', 2500), 
    (6 , 'Atul ', 3000), 
    (7 , 'Rahul ', 3500), 
    (8 , 'Jay ', 4000), 
    (9 , 'Parth ', 1500), 
    (10, 'Lalit ', 600), 
    (11, 'Ramesh', 5000) 
)T(id, name, Slry) 
) 
SELECT S1.name, S1.Slry 
FROM Src S1 
JOIN Src S2 ON S1.Slry<=S2.Slry 
WHERE S2.name='Lalit' 
+0

はあなたに感謝。それは働いている –

0

最善のアプローチは、基準給与を決定し、その後、非平等を使用して、この給与よりも小さな給与を持つ従業員のみを取得するために、CTEを使用することです参加する。

DECLARE @empName as NVARCHAR(100) = 'Atul'; 

WITH cteRefEmp 
AS 
(
    SELECT slry 
    FROM tmp.Emp 
    WHERE name = @empName 
) 
SELECT E.name, E.slry 
FROM 
    tmp.Emp E 
    INNER JOIN cteRefEmp RE ON E.slry <= RE.slry 
+1

ありがとうございます。 CTEが働いています。 –

0

私もこの方法で見つかった:

SELECT emp.name , emp.slry 

from emp 

WHERE emp.slry <= (SELECT slry FROM emp WHERE emp.name = 'Lalit') 
関連する問題