【问题标题】:Select 2 rows and switch the values选择 2 行并切换值
【发布时间】:2020-04-27 23:28:20
【问题描述】:

我在 SQL 中有一个名为“TAB_Movimentos”的表,其中包含“Lançamento”、“Banco”和“Ordem”等内容...

我将它加载到我的“Histórico”数据网格中并隐藏“Ordem”(订单)列(因为它仅供内部使用)

我想在指定事件发生时切换行顺序,为此,我必须从选定的 2 行中更改“Ordem”。

问题是我隐藏了这个“Ordem”列,所以我只能通过查阅我的 SQL 表来获得它。因此,我必须发出 2 个请求来获取数据、存储它们并发出 2 个请求来更新它们。我认为有一种更简单/更快的方法可以做到这一点。

这就是我需要的,有效!使用了很多 Sqlcommand 但我想使用 1 个命令。

A = "SELECT Ordem FROM TAB_Movimentos WHERE Lançamento = '1' AND Banco = '1'" 
B = "SELECT Ordem FROM TAB_Movimentos WHERE Lançamento = '2' AND Banco = '2'" 

"UPDATE TAB_Movimentos SET Ordem = 'A' WHERE Lançamento = '2' AND Banco = '2'"
"UPDATE TAB_Movimentos SET Ordem = 'B' WHERE Lançamento = '1' AND Banco = '1'"

【问题讨论】:

  • DataGridView没有关联DataTable吗?使用它。
  • 只要改变列的.Visible属性,列数据还在DataGridView的.DataSource(DataTable)中。无需再次访问数据库即可获取 Ordem 列值。

标签: sql vb.net select sql-update where-clause


【解决方案1】:

selects 可以使用布尔逻辑合并:

SELECT Ordem 
FROM TAB_Movimentos 
WHERE (Lançamento = 1 AND Banco = 1) OR (Lançamento = 2 AND Banco = 2)

一些数据库支持元组相等,例如:

WHERE (Lançamento, Banco ) IN ( (1, 1), (2, 2) )

至于updates,可以使用条件逻辑:

UPDATE TAB_Movimentos 
SET Ordem = CASE 
    WHEN Lançamento = 2 AND Banco = 2 THEN 'A' 
    WHEN Lançamento = 1 AND Banco = 1 THEN 'B'
END
WHERE (Lançamento = 1 AND Banco = 1) OR (Lançamento = 2 AND Banco = 2)

如果您正在运行 ms-access,则需要 IIF() 而不是 CASE

请注意,这些查询将 LançamentoBanco 视为数字,因为它们看起来像数字。如果它们真的很刺痛,您可以在12 周围加回单引号。

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多