我在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;
任何帮助都将不胜感激。
答案 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