【问题标题】:TSQL left join UPDATE by select appropriate single valueTSQL 通过选择适当的单个值左连接 UPDATE
【发布时间】:2012-07-16 04:58:33
【问题描述】:

为简化起见,有两个表格“交易”和“汇率”。

trades.useridrates.fee通过trades.rateid连接起来=rates.rateid

问题是 SELECT 不会返回唯一值,而是所有可能的值。

SELECT r.fee
FROM rates AS r
LEFT JOIN trades AS t
ON r.rateid = t.rateid
WHERE t.userid=(somevalue)

DISTINCTTOP 1 由于排序混乱,这里不能选择。此处无需订购。

如何选择正确且唯一?

我只想通过给定的trades.rateid 或一些trades.userid 选择适当的rates.fee

trades
------
userid rateid total
101    1      
101    1
101    2
101    1

rates
-----
rateid fee
1      0.90
2      0.80
3      0.70

UPDATE trades
    SET total = (someformula) * (above SELECT query goes here)
    WHERE userid = (somevalue)

谢谢。

【问题讨论】:

  • 您是要查找每位用户的费用总和,还是仅查找每位用户的唯一费用?尝试添加 GROUP BY t.userid, r.fee 以获得每位用户的唯一费用,或将其更改为 SELECT SUM(r.fee) ... GROUP BY t.userid 以汇总用户的费用。也许您可以在两个表格中添加一些示例内容,以及您期望的结果?
  • @ViswanathanIyer:OP 说TOP 1 不是一个选项。
  • 如果有一个 given trades.rateid 那么你的WHERE 子句不应该包含类似…AND t.rateid = (somevalue) 的东西吗?
  • 也许你可以添加一个“鉴于这些记录......我期待这些结果......”部分,因为很难理解你想要什么。
  • 更新了我的问题。很抱歉给您带来不便。

标签: sql tsql select left-join


【解决方案1】:

如果特定交易只有一个汇率,您可以使用update ... from T-SQL 构造:

UPDATE  t
SET     total = (someformula) * r.fee
FROM    trades AS t
JOIN    rates AS r
ON      r.rateid = t.rateid
WHERE   t.userid = (somevalue)

如果rateid 没有唯一标识费率,您应该编辑问题以明确应选择哪个费率。

【讨论】:

  • 谢谢,它有效!这真的应该很简单。我可能有点复杂。
猜你喜欢
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多