当前位置: 首页 > 知识库问答 >
问题:

基于SQL中的另一列填充列

胡桐
2023-03-14

根据DF1DF2的公共列IDDF1中使用名称填充列A的最佳方法是什么?

   ID   A 
   122  nan
   233  nan
       ...

DF2

   ID   B    name 
   122  10   real_name1
   233  20   real_name2
       ... 

得到:

   ID   A 
   122  real_name1
   233  real_name2
        ...

编辑:我还想将列名A更改为new_column_name,这样预期的输出如下所示:

   ID   new_column_name
   122  real_name1
   233  real_name2
        ...

尝试过:

UPDATE t1
SET A = t2.name
FROM df1 t1
INNER JOIN df2 t2
    ON t2.ID = t1.ID;

它发现了错误:

Msg 8152, Level 16, State 2, Line 48
String or binary data would be truncated.
The statement has been terminated.

更新2:

DF1:

CREATE TABLE [dbo].[df1](
    [ID] [nvarchar](20) NULL,
    [SUB_ID2] [nvarchar](15) NOT NULL,
    [DATE] [datetime2](7) NULL,
    [MONTH] [nvarchar](4000) NULL,
    [QTY] [numeric](20, 8) NOT NULL,
    [SUB_ID] [nvarchar](15) NOT NULL,
    [X] [nvarchar](20) NULL,
    [SUBURB_ID] [nvarchar](30) NULL,
    [PROJECT_NAME] [nvarchar](160) NULL,
    [A] [varchar](10) NOT NULL
) ON [PRIMARY]

DF2:

CREATE TABLE [dbo].[df2](
    [ID] [nvarchar](46) NULL,
    [NAME1] [nvarchar](50) NULL,
    [IDx] [nvarchar](15) NULL,
    [P] [nvarchar](50) NULL,
    [Q] [nvarchar](50) NULL,
    [Z] [nvarchar](50) NULL,
    [Y] [nvarchar](30) NULL,
    [MARK] [nvarchar](10) NULL,

) ON [PRIMARY]

共有1个答案

别锐
2023-03-14

如果您确实想更新第一个表,请使用:

sql prettyprint-override">UPDATE t1
SET A = t2.name
FROM df1 t1
INNER JOIN df2 t2
    ON t2.ID = t1.ID;

如果您真的想使用联接来表达更新逻辑,可以使用可更新的CTE:

WITH cte AS (
    SELECT t1.A, t2.name
    FROM df1 t1
    INNER JOIN df2 t2 ON t2.ID = t1.ID
)

UPDATE cte
SET A = name;
 类似资料:
  • 我需要你帮忙整理桌子。我增加了两个新栏。我想用另一列(col1)的数据填充这些列(col2、col3)。目前,此列包含两个以“val1;val2”分隔的值。 col1包含一个字符串,但有时val1不存在,col1只包含“;val2” null 我不知道如何在SQL Server管理中直接做到这一点。我想创建一个脚本来执行这段代码。

  • 我的熊猫数据框中有2列。 我想去掉可乐和可乐,用可乐代替。 基本上,我需要用cola和colb中的值填充colc。如果可乐中有一个楠,那么它会从可乐中拉出,如果可乐中有一个楠,它会从可乐中拉出。如果可乐和可乐中没有楠,它们应该总是相等的。 我将如何在熊猫身上实现这一点?

  • 我有以下问题,因为我是pyspark的新手。基于来自两列的值的条件,我想填充第三列。条件是: < li >如果分号包含在col2中,请检查col1 < ul > < li >如果col1 == 1,则取分号前的值 < li >如果col1 == 2,则取分号后的值 这就是数据帧的样子。 我创建了下面的udf,它给出了错误“不能将列转换为布尔值:请使用” 我通过谷歌搜索各种功能构建了这个udf,所以

  • 问题内容: 我在C#中有一个这样的对象: 假设我在SQL中有两个表,一个表定义了窗口小部件属性,另一个表为单个窗口小部件保存了许多记录,假设窗口小部件的收藏夹编号: 我发现自己经常执行两个SQL查询来填充该对象,即使我知道我可以联接表以仅创建一个查询。原因是只用我需要的数据填充对象似乎要比遍历具有大量重复数据的结果集更简单。当然,与实际情况相比,此小部件示例已大大简化。这是示例: 我的问题是我应该

  • 我有一个带有key_number列的数据帧df1,以及带有key_number和日期列的数据帧df2。如何将date的值分配为df1中的新列,但与键号相关联?当使用loc时,它根据顺序分配值,导致df1中错误的行(键的错误日期)。此外,数据帧具有不同的形状,因此我在df1中保留了空值。 提前感谢:)

  • 如何根据列上的0到max(int)值自动递增列。 假设,我希望增量从$0开始。我必须为此代码编辑什么? 进入