迭代每一行并将两列的值传递给查询并将每个结果附加到表中

Posted

技术标签:

【中文标题】迭代每一行并将两列的值传递给查询并将每个结果附加到表中【英文标题】:ierate each row and pass the values of two columns to a query and append each result to the table 【发布时间】:2020-11-19 15:11:16 【问题描述】:

我有一个表格,其结构如下,名称为table1

sid  userid    date        result
1    169110   2020-01-03   (null)
2    178662   2020-01-06   (null)
3    165381   2020-01-07   (null)
5    368031   2020-01-08   (null)
7    163626   2020-01-09   (null)

现在我需要将 cft.useridcft.date 的每一行值发送到一个 mysql 查询(查询如下),该查询给出每一行的结果值

UPDATE collision_fact_table cft 
  SET cft.on_time_completion = (
 SELECT DISTINCT
        CONCAT(ROUND(NULLIF(SUM(facttable.compliant), 0) / NULLIF(SUM(facttable.Occurences), 0) * 100), '%') AS `Percentage Completed`
        FROM fd_dw.ComplianceFactTable facttable
WHERE  (CAST(facttable.`CourseModule_dueDateID` AS date) - cft.collision_date) <= 0
    AND facttable.UserLicenseInUsing = 1 
    AND (facttable.`CourseModule_dueDateID` > 0)
    AND facttable.UserId = cft.userid
    GROUP BY facttable.`UserID`);

例如,当我将用户 ID 169110 和日期值的第一行值发送到上述查询时,我将得到 69 的结果,我需要将 69 更新为 table1,如下所示

sid  userid    date        result
1    169110   2020-01-03   69

同样,它应该对所有行进行迭代,table1 应该像下面这样更新

sid  userid    date        result
1    169110   2020-01-03   69
2    178662   2020-01-06   55
3    165381   2020-01-07   64
5    368031   2020-01-08   48
7    163626   2020-01-09   56

但是当我尝试执行更新查询时,它给了我错误 Unknown column 'cft.date' in field list

请任何人帮助我

【问题讨论】:

【参考方案1】:

我认为你基本上想要一个相关的子查询:

update table1 t1
set result = (
    select cd.result
    from ...
    where 
        cd.ScheduleDateID <= t1.date
        and cd.CourseModuleComplete_DateID <= t1.date
        and cd.UserId = t1.userid
)

您没有提供有关子查询本身的太多详细信息。关键是它应该返回一行,并且只返回一行:

如果它不返回任何行,则table1 中相应行的result 将设置为null(无论其原始值如何) - 这可能是您想要的,也可能不是您想要的

如果返回多于一行,则查询会出错

【讨论】:

感谢您的回复!是否只有每一行的值会被传递到子查询中? @Sai:是的,对table1中的每一行都执行子查询,并更新对应的result 嗨..我已经更新了问题中的子查询。我收到错误Unknown column 'cft.collision_date' in 'field list

以上是关于迭代每一行并将两列的值传递给查询并将每个结果附加到表中的主要内容,如果未能解决你的问题,请参考以下文章

如何迭代数据列的每个单元格,转换和附加每个单元格?

查询添加两列的值

熊猫,对于每一行获取两列之间最大列的值

将函数应用于 data.frame 中的每一行并将结果附加到 R 中的 data.frame

循环 LINQ 查询并将结果附加到 DataTable

Java处理excel根据某列的值查询,并将结果显示在其他列中