我有结果集 -
Id var_name var_value
1 min_points 20
2 max_points 120
3 avg_points 50
4 total_points 320
这是我试图写的一个查询 -
select
@min_points =case
when var_name='min_points' then var_value
end,
@max_points=case
when var_name='max_points' then var_value
end,
@avg_points=case
when var_name='avg_points' then var_value
end,
@total_points= case
when var_name='total_points' then var_value
end
from
**joined multiple tables**
但是上面的查询不起作用,我可以理解为什么..但是任何人都可以帮我编写一个查询,它基本上可以帮助我将所有四个var_values
存储在我拥有的四个变量中,方法是检查{{ 1}}?
答案 0 :(得分:2)
您需要将结果集合成一行,以避免在不同时间分配相同的变量。由于它代表结果集中的每一行,因此分配了变量,这意味着在分配后,其中3个不符合条件且为NULL
且1为NOT NULL
。
select
@min_points =max(case
when var_name='min_points' then var_value
end),
@max_points=max(case
when var_name='max_points' then var_value
end),
@avg_points=max(case
when var_name='avg_points' then var_value
end),
@total_points= max(case
when var_name='total_points' then var_value
end)
from
**joined multiple tables**
或者你可以保留多个赋值,但如果正在处理的行不是感兴趣的行,只需将相同的值重新分配给变量。
@min_points = CASE
WHEN var_name = 'min_points' THEN var_value
ELSE @min_points
END
答案 1 :(得分:1)
create table #activity(
ID int,
var_name varchar(20),
var_value int,
)
INSERT INTO #activity VALUES(1,'min_points',20);
INSERT INTO #activity VALUES(2,'max_points',120);
INSERT INTO #activity VALUES(3,'avg_points',50);
INSERT INTO #activity VALUES(4,'total_points',320);
select MAX(CASE WHEN var_name='min_points' THEN var_value end)as min_points,
MAX(CASE WHEN var_name='max_points' THEN var_value end)as max_points,
MAX(CASE WHEN var_name='avg_points' THEN var_value end)as avg_points,
MAX(CASE WHEN var_name='total_points' THEN var_value end)as total_points
from #activity
Drop Table #activity;
答案 2 :(得分:0)
你可能最好在多个查询中执行此操作
select @min_points = var_value from activity where varmane = 'min_points'
select @max_points = var_value from activity where varmane = 'max_points'
select @avg_points = var_value from activity where varmane = 'avg_points'
select @total_points = var_value from activity where varmane = 'total_points'
答案 3 :(得分:0)
你必须像这样使用它:
case (var_name)
case 'min_points'
var_value
case 'max_points'
var_value
default
var_value
end
事情是,看起来你的所有情况都会给出相同的结果,所以我不明白你想要做什么。