首页 > 解决方案 > 显示价值高于某一特定记录的记录

问题描述

我需要找到值高于其他名称之一的名称列表。我知道如何只显示高于某个值的值,但我不知道如何将其与名称联系起来。

这就是我现在所拥有的,但它不起作用

SELECT t1.Value, t2.Name
FROM dbo.Table1 t1 
LEFT JOIN    dbo.Table2 t2
ON t1.Id_name = t2.Id_name
WHERE t1.Value > (SELECT t1.Value FROM dbo.Table1 WHERE t2.Name = '@Name')

这是我希望得到的东西

NameWanted = 3 等等:

名称1 4

名称2 5

名称3 4

名称4 4

...

表 1 和表 2 中共有的一列是 Id_name

对我有用的是以下解决方案:

with cte as (
    SELECT t1.ID_Name, t1.Name, t2.Value, t2.ID_Value
    FROM dbo.Table2 t2
         JOIN dbo.Table1 t1 ON t1.ID_Name = t2.ID_Name)
SELECT cte1.Value, cte1.Name
FROM cte cte1
GROUP BY cte1.Value, cte1.Name
HAVING cte1.Value>(SELECT MAX(cte2.Value) FROM cte cte2 WHERE cte2.Name ='@Name' AND cte1.ID_Value = cte2.ID_Value)

标签: sqlsql-server

解决方案


这解决了问题的原始版本。

您可以使用子查询:

select t.*
from t
where t.value > (select t2.value from t t2 where t2.name = @name);

我最初假设它name在表中是唯一的。如果没有,您可以使用聚合:

select t.*
from t
where t.value > (select max(t2.value) from t t2 where t2.name = @name);

all

select t.*
from t
where t.value > all (select t2.value from t t2 where t2.name = @name);

推荐阅读