0


我正在做一个涉及矩阵的矩阵乘法项目
所以这是我的表格格式:

   create table A ( row integer, col integer, val integer);

我需要做的是用数据填充每个表,
任务 1:创建一个 200*200 矩阵 A 并将其所有元素初始化为 1。
这意味着我会手动
插入 <0,0,1> <0, 1,1> <0,2,1> ....<0,199,1>
插入<1,0,1> <1,1,1> <0,2,1> .....<1,199, 1>等等

任务 2:创建 200*200 矩阵 A,其对角元素为 1。

所以我想知道而不是手动执行此操作,是否有自动初始化所​​有元素?
以下是使用 while 循环的尝试:

create table A ( row integer, col integer, val integer);
DECLARE @count INT
SET @count = 0
DECLARE @count2 INT
SET @count2 = 0
WHILE (@count < 200)
BEGIN
   WHILE (@count2 <200)
   BEGIN
      INSERT INTO A([row], [col]) VALUES (@count, @counts)
      SET @count2 = (@count2 + 1)
   END
   SET @count = (@count + 1)
END

上面这个对吗?我对sql相当陌生:(

4

1 回答 1

2

避免循环和迭代的东西。您在 SQL Server 中 - 认为基于集合

尝试这个

insert into A( row, col, val )
select row, col, 1
from 
(
        SELECT Row = number from master..spt_values 
        where type='P' and number between 1 and 200
) Rows
CROSS JOIN
(
        SELECT Col = number from master..spt_values 
        where type='P' and number between 1 and 200
) Cols

对于您的第二个要求,您可以偷懒并添加

where Row = Col

如果是一次性的,那应该没问题。

master..spt_values位是关于获取 1 到 200 之间的数字范围。您也可以有以下变化:

; WITH cte AS
  (
    SELECT n = number  FROM master..spt_values 
    WHERE type = 'P'  AND  number BETWEEN 1 AND 20
  ) 
INSERT INTO A ( row, col, val )
SELECT Rows.n, Cols.n, 1
FROM
    cte AS Rows
  CROSS JOIN
    cte AS Cols ;
于 2012-11-28T06:43:11.327 回答