用于乘法的SQL查询

kil*_*der 8 sql-server

我有两个关系(SQL数据库中的表)有纯数字.这两种关系可以想象为矩阵.

问题是编写一个SQL查询,将两个关系相乘,就像我们使用普通矩阵乘法一样.

我一直绞尽脑汁......但是没用:O

任何人都可以帮我解决?????

表1: 在此输入图像描述

@Aaron Bertrand:

我正在使用SQL Server 2008 R2这些表的屏幕截图是:

表格1 :

在此输入图像描述

表2:

在此输入图像描述

我使用了查询:

select t1.A,t2.B,SUM(t1.C*t2.C)
from Table_1 as t1 join Table_2 as t2 on t1.B=t2.A 
group by t1.A,t2.B   
order by t1.A
Run Code Online (Sandbox Code Playgroud)

答案 :

在此输入图像描述

这种方式非常简单,而不是像@Marcelo Cantos和@ypercube所建议的我原来的Matrix方式......

Mar*_*tos 14

假设以下结构:

A (row INT, col INT, value FLOAT)
B (row INT, col INT, value FLOAT)
Run Code Online (Sandbox Code Playgroud)

你可以这样写:

SELECT A.row, B.col, SUM(A.value * B.value)
  FROM A JOIN B ON A.col = B.row
 GROUP BY A.row, B.col
Run Code Online (Sandbox Code Playgroud)

编辑:使用表格的表格布局来模仿矩阵结构使这个问题变得更加困难,至少有两个原因:

  1. 您无法以对称方式处理行和列.
  2. 您无法轻松地引用元素来自的行.

最好的解决方法是在每个表中添加一个行号列,这样......

table1 (row, A, B, C)
table2 (row, A, B, C)
Run Code Online (Sandbox Code Playgroud)

...然后综合我上面建议的结构作为每个表的视图......

CREATE VIEW A
    SELECT row, 1, A FROM table1 UNION
    SELECT row, 2, B FROM table1 UNION
    SELECT row, 3, C FROM table1 UNION

-- Ditto VIEW B
Run Code Online (Sandbox Code Playgroud)

...最后使用上面的SQL来评估答案.如有必要,您可以编写另一个视图,将结果转换回表格结构.

然而,坦率地说,我认为所有这些都是非常错误的.使用行/列/值结构(并且逻辑上更一致)比A/B/C/...结构更好.例如,考虑使用row/col/value计算矩阵转置的容易程度:

SELECT col AS row, row AS col, value
  FROM A
Run Code Online (Sandbox Code Playgroud)

或者总和对角线:

SELECT SUM(value)
  FROM A
 WHERE row = col
Run Code Online (Sandbox Code Playgroud)

并问自己这些结构使用起来有多容易.

PS:关于逻辑连贯性的主题,你的表格不是正确意义上的关系,因为它们在行上定义了一个顺序,并且必须允许重复的行,这两个行在关系中都没有意义,这是(松散地)定义为一组元组.n维关系与二维表的这种混合是目前数据管理不善的核心问题.