我的数据如下:
[attribute] [value]
foo yellow
foo green
foo red
foo blue
foo orange
foo cyan
foo magenta
foo white
foo brown
foo purple
我想将数据转换为兼容性矩阵的一种框架,它应该看起来像(cols和row基于属性值):
yellow green red blue orange cyan magenta white brown purple
yellow x
green x
red x
blue x
orange x
cyan x
magenta x
white x
brown x
purple x
相同类型的属性应自动填充x
,所有其他组合将由用户稍后设置。由于values
每attribute
的数量可能不同,因此如果转换是动态完成的,那就太好了。
我使用pivot / unpivot进行了一些镜头但只改变了cols和行 - 所以只走了一半(或四分之一;))。
任何帮助或提示表示赞赏!
编辑:我已更改了演示数据的属性值,以便更好地理解。颜色值以前是数字。
Edit2 :根据Stephan的更新答案以及提到的动态获取结果的目标,我添加了以下示例查询。也许有人可以使用它,有相同的需求。 #data是提供基础数据的临时表。
DECLARE @SQL VARCHAR(MAX);
SET @SQL = 'SELECT ' + '?placeholder?' + ' as name, '
SELECT @SQL = @SQL + case when row_number() over ( order by rand() ) > 1 then ',' else '' end + 'case value when ''' + cast( d.value as nvarchar ) + ''' then 1 else 0 end as "' + cast( d.value as nvarchar ) + '"' from #data as d;
select @sql = @sql + ' from #data;'
set @SQL = replace( @sql, '?placeholder?', 'value' );
--select @SQL;
exec ( @sql )
答案 0 :(得分:0)
如果我理解你的问题你可以试试这个:
编辑更新新要求
CREATE TABLE `test_matrix_colors` (
`color` varchar(255) NOT NULL
);
INSERT INTO `test_matrix_colors` (`color`) VALUES
('yellow'),
('green'),
('red'),
('blue'),
('orange'),
('cyan'),
('magenta'),
('white'),
('brown'),
('purple');
SELECT
color,
IF(color='yellow',1,0) as yellow,
IF(color='green',1,0) as green,
IF(color='red',1,0) as red,
IF(color='blue',1,0) as blue,
IF(color='orange',1,0) as orange,
IF(color='cyan',1,0) as cyan,
IF(color='magenta',1,0) as magenta,
IF(color='white',1,0) as white,
IF(color='brown',1,0) as brown,
IF(color='purple',1,0) as purple
FROM
test_matrix_colors
WHERE 1
我在当地获得的结果:
之后,您可以获得所需的任何组合......例如蓝橙色:
SELECT
orange as blue_orange
FROM (
SELECT
color,
IF(color='yellow',1,0) as yellow,
IF(color='green',1,0) as green,
IF(color='red',1,0) as red,
IF(color='blue',1,0) as blue,
IF(color='orange',1,0) as orange,
IF(color='cyan',1,0) as cyan,
IF(color='magenta',1,0) as magenta,
IF(color='white',1,0) as white,
IF(color='brown',1,0) as brown,
IF(color='purple',1,0) as purple
FROM
test_matrix_colors
WHERE 1
) as tmp
WHERE
color = 'blue'