1
我如下得到的數據:創建一個兼容性矩陣
[attribute] [value]
foo yellow
foo green
foo red
foo blue
foo orange
foo cyan
foo magenta
foo white
foo brown
foo purple
我想數據轉換爲一種框架的一個兼容性列表,其內容應當類似於(COLS和行是基於屬性值):
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
的,所有其它的組合是由用戶設置的稍後的。由於attribute
的values
的數量可能不同,所以如果轉換是動態完成的,那將是很好的。
我用pivot/unpivot做了一些鏡頭,但只改變了cols ans行 - 所以只用了一半(或四分之一))。
任何幫助或提示,感謝!
編輯:我更改了演示數據的屬性值以便更好地理解。顏色值之前是數字。
編輯2:根據Stephan的更新答案和所提到的動態獲取結果的目的,我添加了以下示例查詢。也許有人可以使用它,有相同的需要。 #數據是提供基礎數據的臨時表。
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)
想法不錯,但:'IF(,,)'不能在SQL 2008年工作,我把它改爲'情況.. when'。此外,「價值」不包括在估計數據中顯示的第一列中 - 可能是誤解,因爲演示數據中的「價值」被設置爲1到10,這也可能是rownumber;) – Nico 2013-04-23 11:39:04
對不起'IF'語句我在mysql中編寫了查詢,因爲這是我已經安裝的,你能準確地知道你有什麼數據或至少有一些與之相近的數據嗎? – Stephan 2013-04-23 12:55:29
我不完全明白你的問題! 「演示數據」在鏈接的SQL小提琴中提供。估計結果顯示在原來的帖子..! – Nico 2013-04-23 14:18:06