如何在SQL Server中找到矩阵的逆

时间:2017-11-06 21:03:47

标签: sql-server matrix

我有一个包含多行/列的矩阵。列数始终等于行数,但我不知道确切的数字,因为它们是另一个查询的结果。

这是一个包含2列/行的简单示例

      ID1  ID2
1     4    7
2     2    6

我从一个看起来像这样的表中得到这个矩阵:

ID1 ID2 Value
1   1   4
1   2   7
2   1   2
2   2   6

现在我希望得到那个矩阵的逆。

结果在Matrix中看起来像这样:

    ID1    ID2
1   0.6    -0.7
2   -0.2   0.4

或者在表格中这样:

ID1 ID2 Value
1   1   0.6
1   2   -0.7
2   1   -0.2
2   2   0.4

基本上是SQL Server中的Excel Formula = {MINVERSE(Array)}

在我的数据库中,我同时拥有Table和Matrix,因此我可以使用最有效的方法来找到它的反转。

1 个答案:

答案 0 :(得分:0)

这是2x2矩阵的实现。它很难看,因为矩阵在RDBMS是关系的意义上不是关系。但也许它会让你足够接近。

SELECT
   CASE WHEN id1=id2 THEN CASE WHEN id1=1 THEN 2 ELSE 1 END ELSE ID1 END as ID2,
   CASE WHEN id1=id2 THEN CASE WHEN id2=1 THEN 2 ELSE 1 END ELSE ID2 END as ID2,
   CASE WHEN id1<>id2 THEN -1 ELSE 1 END * matrix.value/(determinate1.value-determinate2.value) as inverse_value
FROM
  (SELECT EXP(SUM(LOG(value))) as value FRom matrix where id1=id2) as determinate1,
  (SELECT EXP(SUM(LOG(value))) as value FROM matrix WHERE id1<>id2) as determinate2,
  matrix;

此处位于sqlfiddle