Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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中的SELECT更新-如果SELECT返回多个项目(后续问题2334712)_Sql_Sql Server_Tsql - Fatal编程技术网

如何从SQL Server中的SELECT更新-如果SELECT返回多个项目(后续问题2334712)

如何从SQL Server中的SELECT更新-如果SELECT返回多个项目(后续问题2334712),sql,sql-server,tsql,Sql,Sql Server,Tsql,这是问题的后续行动 如果我使用问题2334712中的查询,我将如何在表A中插入“ABC”、“BCD”或“DEF” 我试过了,但无法在查询中使用ORDERBY子句 如果是升序,查询结果应该是ABC,如果是降序,查询结果应该是DEF,或者基于另一列上的键,比如B3 连接到一个子查询,该子查询为B1的每个值标识一条记录: 本例假设您希望记录的每个B1值都具有最低的B2值。但是,您可以更改对ROW_号码的呼叫,但您需要使用不同的顺序。您可以在下面尝试使用ROW_号码 WITH t1 AS ( S

这是问题的后续行动

如果我使用问题2334712中的查询,我将如何在表A中插入“ABC”、“BCD”或“DEF”

我试过了,但无法在查询中使用ORDERBY子句

如果是升序,查询结果应该是ABC,如果是降序,查询结果应该是DEF,或者基于另一列上的键,比如B3


连接到一个子查询,该子查询为B1的每个值标识一条记录:


本例假设您希望记录的每个B1值都具有最低的B2值。但是,您可以更改对ROW_号码的呼叫,但您需要使用不同的顺序。

您可以在下面尝试使用ROW_号码

WITH t1 AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY B1 ORDER BY B3 desc) rownum
    FROM Table_B
)

UPDATE a
SET A2 = b.B2
FROM Table_A a
INNER JOIN t1 b
    ON a.A1 = b.B1 AND rn=1
WHERE
    a.A1 < 10;
也可以使用相关子查询

UPDATE a
    SET A2 = b.B2
    FROM Table_A a
    INNER JOIN Table_B b
        ON a.A1 = b.B1 AND exists (select max(B3) from Table_B c on b.B1 and c.B1)
    WHERE
        a.A1 < 10;

您可以使用“with”表, 诸如此类:

    WITH AAA (T_B, ID)
AS
(
SELECT  TOP (SELECT COUNT(*) FROM Table_A)  Table_B.B2 AS RR ,Table_A.A1
FROM Table_A INNER JOIN Table_B
  ON Table_A.A1 = Table_B.B1
WHERE Table_A.A1 < 10
ORDER BY 1 DESC-- OR ASC

)
UPDATE Table_A
SET Table_A.A2 = T_B
FROM AAA

表B中B1=1有三个值。在你的问题中,你说的是基于我的选择-你能解释一下你的选择吗?选择可以是B3中的最高值、B3中的最低值或B3中的特定值,例如B3=2
UPDATE a
    SET A2 = b.B2
    FROM Table_A a
    INNER JOIN Table_B b
        ON a.A1 = b.B1 AND exists (select max(B3) from Table_B c on b.B1 and c.B1)
    WHERE
        a.A1 < 10;
    WITH AAA (T_B, ID)
AS
(
SELECT  TOP (SELECT COUNT(*) FROM Table_A)  Table_B.B2 AS RR ,Table_A.A1
FROM Table_A INNER JOIN Table_B
  ON Table_A.A1 = Table_B.B1
WHERE Table_A.A1 < 10
ORDER BY 1 DESC-- OR ASC

)
UPDATE Table_A
SET Table_A.A2 = T_B
FROM AAA