SQL-запрос для умножения

У меня есть два отношения (таблицы в базе данных SQL) с чисто числами. Эти два отношения можно представить как Матрицы.

Вопрос состоит в том, чтобы написать SQL-запрос, чтобы умножить там два отношения, как мы это делаем с нормальным умножением матрицы.

Я за это ломаю голову … Но бесполезно: O

Может кто-нибудь, пожалуйста, помогите мне ?????

Таблица №1: введите описание изображения здесь

@ Аарон Бертран:

Я использую 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 

Ответ :

введите описание изображения здесь

Этот способ довольно прост, а не мой оригинальный способ Matrix, предложенный @Marcelo Cantos и @ypercube …

Предполагая следующую структуру:

 A (row INT, col INT, value FLOAT) B (row INT, col INT, value FLOAT) 

Вы можете написать это:

 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 

EDIT: использование табличной компоновки таблицы для имитации структуры матрицы затрудняет эту проблему по крайней мере по двум причинам:

  1. Вы не можете разбирать строки и столбцы симметрично.
  2. Вы не можете портативно ссылаться на строку, из которой приходит элемент.

Лучше всего было бы добавить столбец номера строки в каждую таблицу, таким образом …

 table1 (row, A, B, C) table2 (row, A, B, C) 

… затем синтезирует структуру, которую я предлагаю выше, как представление для каждой таблицы …

 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 

… и, наконец, использовать SQL выше для оценки ответа. При необходимости вы можете написать другое представление, которое преобразует результат обратно в табличную структуру.

Честно говоря, я считаю, что все это очень ошибочно. Вы найдете, что все работает намного лучше с структурой row / col / value (и более логически когерентной), чем структура A / B / C / …. Рассмотрим, например, насколько легко вы можете вычислить транспонирование матрицы с использованием значения row / col /:

 SELECT col AS row, row AS col, value FROM A 

или суммировать диагональ:

 SELECT SUM(value) FROM A WHERE row = col 

и спросите себя, насколько легко они будут использовать вашу структуру.

PS: В отношении логической согласованности ваши таблицы не являются отношениями в собственном смысле слова, поскольку они определяют порядок в строках и должны обязательно допускать повторяющиеся строки, ни один из которых не имеет смысла в отношении, которое (свободно) определяется как набор кортежей. Это сочетание n-мерных отношений с двумерными таблицами лежит в основе многих проблем, связанных с управлением данными в наши дни.

Я полагаю, что обе таблицы имеют (i, j, dataij) столбцы

где i означает, что row и j означают column :

 SELECT ai , bj , SUM(a.dataij * b.dataij) FROM table1 AS a JOIN table2 AS b ON aj = bi GROUP BY ai , bj 

С этой структурой данных операции между матрицами, такими как умножение, проще. Сложнее показать таблицы в обычном матричном формате. Один из способов – использовать что-то вроде этого (проверьте PIVOT, если у вас есть версия SQL-Server, которая поддерживает ее для других способов ее достижения):

 SELECT MIN(CASE WHEN j=1 THEN dataij ELSE NULL END) AS column1 , MIN(CASE WHEN j=2 THEN dataij ELSE NULL END) AS column2 , MIN(CASE WHEN j=3 THEN dataij ELSE NULL END) AS column3 FROM tableX GROUP BY i ORDER BY i ; 
Interesting Posts

Тот же сервер с несколькими экземплярами сонара (разные версии) и другой версией SQL Server для каждого экземпляра сонара

Экспортировать все таблицы SQL Server сразу в txt или csv

Триггер для обновления столбца таблицы после вставки?

Объявление переменных в CTE SQL Server 2008

Может ли Microsoft Azure SQL Server использовать хранилище FileTable / Blob?

Я использую SQL UDF для инкапсуляции простой отчетности / бизнес-логики. Должен ли я избегать этого?

Задержка выполнения sql при назначении переменной

В чем разница между одноранговой и репликацией слияния с SQL Server?

Как установить пользовательскую базу данных настольных приложений в SQL Express?

Как подстановочный знак от значения столбца?

Как передать переменные в SqlCommand

SQL Server: переменная таблицы, используемая во внутреннем соединении

Разбор инструкций T-SQL для токенов

Group By Count и поле в одном запросе

Репликация транзакций и триггеры

Давайте будем гением компьютера.