The conventional way of setting up a structure with an arbitrary number of criteria would be something like the following:
create table phones (pid int identity primary key, pnam varchar(64));
insert into phones (pnam) values ('Google X'),('Samsung P');
create table props (id int, crit varchar(32),
val varchar(32));
create table scores (critsc varchar(32), valsc varchar(32), score int);
insert into props values (1,'hw','metal'),(1,'sec','high'),(1,'os','android'), (2,'hw','diamond'),(2,'sec','low'),(2,'os','windows');
insert into scores values ('hw','plastic',3),('hw','glas',5),('hw','metal',8),('hw','diamond',10),('sec','low',2),('sec','high',5),('os','windows',4),('os','java',6),('os','meego',7),('os','android',10);
select coalesce(pnam,'ALL MODELS') pnam,
coalesce(crit,'total score') crit,
case when crit>'' then max(val) else '' end val, sum(score) score
from phones
inner join props on pid=id
inner join scores on critsc=crit and valsc=val
group by pnam,crit with rollup
Output:
pnam crit val score
Google X hw metal 8
Google X os android 10
Google X sec high 5
Google X total score 23
Samsung P hw diamond 10
Samsung P os windows 4
Samsung P sec low 2
Samsung P total score 16
ALL MODELS total score 39
demo: https://rextester.com/NMKGY74929
Admittedly, this is not the shortest way of doing it, but it allows for all kinds of criteria-and-value schemes to be used without ever having to change the table structure.