離開模式要求按原樣嘗試:
create table `c_data` (
`Name` varchar(24) not null,
`c1` int(5) not null,
`c2` int(5) not null,
`c3` int(5) not null,
`c4` int(5) not null
);
insert c_data values
('Paulus', 50, 50, 0, 0),
('John', 0, 50, 0, 0),
('Anne', 0, 0, 50, 0),
('Chris', 0, 0, 0, 50);
select
name,
case greatest(c1, c2, c3, c4)
when c1 then concat('c1', ' (', c1, ')')
when c2 then concat('c2', ' (', c2, ')')
when c3 then concat('c3', ' (', c3, ')')
when c4 then concat('c4', ' (', c4, ')')
end as top_column
from c_data
order by name;
由於@shadow指出你還必須決定如何處理關係。這個查詢只需要共享最大值的第一列(參見Paulus)。
但是,考慮正如您所建議的正常化您的表。數據將被更有效地存儲,並且該表對於將來的查詢將更加通用。領帶仍然需要處理。該版本從升序字母數字排序中獲取第一個data_type。
create table c_data
(
name varchar(24),
data_type varchar(8),
data_value int(5)
);
insert into c_data values
('Paulus', 'c1', 50),
('Paulus', 'c2', 50),
('John', 'c2', 50),
('Anne', 'c3', 50),
('Chris', 'c4', 50);
select
name,
concat(min(data_type), ' (', max(data_value), ')') as top_column
from c_data
group by name
order by name;
查看正常化。 – Strawberry
你可以粘貼表格創建代碼嗎?使用'show create table table' – Phiter
@PiterFernandes http://pastebin.com/7XtHUbha這裏是表創建,我需要得到的是從1查詢每列中的頂部'名稱'。我希望你能幫助我... –