为SQL Server 2008中具有相同条件的每个记录分配数据值

时间:2016-04-04 19:18:07

标签: sql sql-server sql-server-2008

我在SQL Server 2008中有一个表,如:

Period    Name     Value
1         A        10
2         A        20
3         A        30
4         A        40
1         B        50          
2         B        80
3         B        70
4         B        60

我需要编写一个选择查询包括一个新列MainValue,其中包含值为term = 4的值,表示每个数据的名称。

示例:

 Period     Name     Value    MainValue
    1         A        10       40
    2         A        20       40
    3         A        30       40
    4         A        40       40
    1         B        50       60 
    2         B        80       60
    3         B        70       60
    4         B        60       60

我该如何提供?我尝试了下面的那个,但它没有按我的意愿工作。

Select 
    *, 
    (select Value where Period = 4) as MainValue 
from myTable;

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

试试这个:

SELECT Period, Name, Value, 
       MAX(CASE WHEN Period=4 THEN Value END) OVER (PARTITION BY Name) AS MainValue
FROM mytable

该查询使用一个窗口函数,其条件应用于Name分区:该函数返回每个分区内Value对应的Period=4

答案 1 :(得分:0)

您可以通过多种方式实现这一目标。作为列的相关子查询,交叉应用于相关查询或cte。我个人喜欢cte方法。它看起来像这样。

with MainValues as
(
    select Name
        , Value
    from SomeTable
    where Period = 4
)

select st.*
    , mv.Value as MainValue
from SomeTable st
join MainValues mv on st.Name = mv.Name