1

我的数据如下:

[attribute] [value]
foo yellow
foo green
foo red
foo blue
foo orange
foo cyan
foo magenta
foo white
foo brown
foo purple

在这个小提琴中提供

我想将数据转换为兼容性矩阵的一种框架,它应该看起来像( cols 和 rows 基于属性值):

        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,其他所有组合由用户稍后设置。由于valuesper的数量attribute可能会有所不同,因此如果动态完成转换会很好。

我使用 pivot / unpivot 拍摄了一些照片,但只改变了 cols ans 行 - 所以只走了一半(或四分之一;))的方式。

任何帮助或提示表示赞赏!

编辑:为了更好地理解,我更改了演示数据的属性值。颜色值以前是数字。

Edit2:根据斯蒂芬的更新答案和所提到的动态获取结果的目标,我添加了以下示例查询。也许有人可以使用它,有同样的需要。#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 )
4

1 回答 1

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'
于 2013-04-23T09:18:19.683 回答