Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008的矩阵表索引_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL Server 2008的矩阵表索引

SQL Server 2008的矩阵表索引,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个表,其中有两列是由另一个名称表构建的,一个是标识,另一个是这样的名称: ID---Name 1----Mike 2----Jeff 3----Robert ...down to however many ID------Name------Mike-------Jeff--------Robert-------- ...out to however many 1 -------Mike-------NULL------100.1------5.4-------- ...out to h

我有一个表,其中有两列是由另一个名称表构建的,一个是标识,另一个是这样的名称:

ID---Name
1----Mike
2----Jeff
3----Robert
...down to however many
ID------Name------Mike-------Jeff--------Robert-------- ...out to however many
1 -------Mike-------NULL------100.1------5.4-------- ...out to however many
2 -------Jeff---------100.1------NULL-----21.23--------- ...out to however many 
3 ------Robert-------5.4--------21.23-----NULL---------...out to however many
可能是10行,可能是100行。这取决于其他表格的输入,这些表格总是在变化,但不会超过160左右

现在,名称的配对将具有某种意义,因此十进制数据类型分数将与所述配对相关联(在这一点上如何并不重要,现在只需要构建它……数字只是说明性的)。我设想一种类似这样的矩阵:

ID---Name
1----Mike
2----Jeff
3----Robert
...down to however many
ID------Name------Mike-------Jeff--------Robert-------- ...out to however many
1 -------Mike-------NULL------100.1------5.4-------- ...out to however many
2 -------Jeff---------100.1------NULL-----21.23--------- ...out to however many 
3 ------Robert-------5.4--------21.23-----NULL---------...out to however many
…下降到第一张桌子上碰巧有多少人

也许这不是最理想的方法(是的,我知道表中有重复项,但我计划对查询进行结构化,以便忽略重复项),但目前还不知道有多少可行的选项。在四处搜索之后,我想也许我想要一个轴心,但这似乎不适合我这里的情况,因为我将名称留在列中,并将它们作为列标题关联成成对的分数。然后我想也许我想存储一个变量作为每行的值,然后将它们添加为列。那没用。我最近的一次迭代可能是创建一个临时表,作为带有和identity列的精确副本,然后尝试通过identity选择特定的名称,并在它们之间循环,但我甚至无法获取名字,并将其作为name列下的行值之外的列名…见下文

--create a table of names with an identity column
CREATE TABLE myTable2
(
ID INT IDENTITY(1,1),
Name VARCHAR(5),
);

--add names to the table from a different table
INSERT INTO myTable1  (Name)
SELECT Name
FROM myTable1 

--create a temp table with the same values
SELECT ID, Name
INTO #new
FROM myTable2
GROUP BY ID, Name

--insert name from first row as a column head
INSERT INTO myTable2 (SELECT Number FROM #new WHERE ID =1)
因此,在最后一点中,插入“,我想复制名称,在本例中是“Mike”,并使其成为同一个表中的列标题,其中它是一行(就像在我的第二个表中)。我收到一条错误消息,说明语句的语法不正确。为什么不允许这样做?我怎样才能让它做我想做的事?也有人建议,比我更了解这方面的知识,也许不需要将表构建为矩阵,而是按照下面的方式构建它。这是有可能在这里摆脱重复的这种方式,我会除了我甚至不知道从哪里开始这样做

Name1-----------Name2-----------Calculated Value
Mike--------------Mike-------------NULL
Jeff---------------Mike-------------100.1
Robert-------------Mike-------------5.4
Mike--------------Jeff-------------100.1
Jeff----------------Jeff-------------NULL
Robert------------Jeff-------------21.23
Mike--------------Robert-----------5.4
Jeff---------------Robert-----------21.23
Robert------------Robert-----------NULL
...etc  
任何帮助我的建议或指向正确和最合适的方向都将不胜感激

编辑:以下是我解决问题的方法。看起来笛卡尔积是一种方法。谢谢@Alex Kudryashev

--create a table of cross joined names
CREATE TABLE cartNames
(
Name1 VARCHAR(5),
Name2 VARCHAR(5),
);

--create two temporary tables from a source table of names
SELECT Name AS Name1
INTO #name1
FROM names
GROUP BY Name 

SELECT Name AS Name2
INTO #Name2
FROM names
GROUP BY Name 

--populate the Cartesian table
INSERT INTO cartNames
SELECT * FROM #name1 CROSS JOIN #name2

--get rid of the temp tables
DROP TABLE #Name1
DROP TABLE #Name2

--add columns and populate calculated scores
---

看起来您想要创建一个笛卡尔积。有非常简单的方法可以做到这一点

declare @tbl table(name varchar(10))
insert @tbl(name) values('MIke'),('Jeff'),('Robert')

select t1.name name1,t2.name name2, some_udf(t1.name,t2.name) calc_value
from @tbl t1 cross join @tbl t2

最后一条路就是要走的路。然而,不清楚你在问什么,我道歉。我无法让查询的最后一部分做我想做的事情(即,将行中的名称放在下一列的顶部),这可能会让我得到底部的输出。如果是这样的话,先生…再加一个给你!我会在周一告诉你进展如何,并给你打勾和投票!!!!我还将编辑标题以包含您的措辞。再次感谢,善良的先生!