【问题标题】:Sql Join Table , Part Of Select Data ConditionSql连接表,部分选择数据条件
【发布时间】:2014-06-23 09:29:26
【问题描述】:

我有两个表A表和B表。

表 A 包含 ID、编号、时间、值 1

表 B 包含 ID、数据、Value2

Example of the Record on Table A:

Id      Number     Tried      Value1
------- ---------- --------- ---------
1       123        23         5
2       124        23         6
3       1254       23         7

Example of the Record on Table B:

Id      Data       Value2
------  ---------  -------
1       123,23     6
2       122,21     5
3       1254,23    7

我的目的是通过表 B 数据与表 A 的连接条件将值 1 和值 2 相加并尝试匹配记录。

Example :
Id      (Value1 + Value2)
------- -----------------
1       11
3       14

我的查询:

select a.Id , a.Value1+ b.Value2
from a
join b on substring(b.Data,1,3) = a.Number and substring(b.Data,5,2) = a.Tried

我尝试过子字符串,但数据记录长度的值在 Id 1 和 3 上比较不同,并且当前的查询结果仅显示 Id 1。是否有其他方法可以将 1 列字段拆分为 2 种值取出 ',' 加入表 a 上的 2 个字段?

【问题讨论】:

  • 使用这样的连接字符串作为外键是一个糟糕的主意。你一定要加入吗?

标签: sql join


【解决方案1】:

在 Oracle 中检查此查询是否有帮助

select a.Id , (a.Value1+ b.Value2)
from a, b
where a.id = b.id and b.Data = (a.Number || ',' || a.Tried);

编辑:基于 @Joachim Isaksson 建议:

select a.Id ,b.Id (a.Value1+ b.Value2)
from a, b
where b.Data = (a.Number || ',' || a.Tried);

【讨论】:

  • 我不确定 a.id=b.id 应该是一个标准。
  • @JoachimIsaksson:根据您的输入修改答案。谢谢!
【解决方案2】:

您可以使用以下查询。

select A.Id, (A.Value1 + B.Value2) [Value1 + Value2] from tblA A
    inner join tblB B on A.Number = SUBSTRING(B.Data, 1, charindex(',', B.Data, 1) - 1)
        And A.Tried = SUBSTRING(B.Data, charindex(',', B.Data, 1) + 1, Len(A.Tried))

我已经在 SQL Server 中尝试过。

Nishanthi Grashia 的查询也可以在 SQL Server 中转换。您只需将 || 替换为 +

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2015-06-20
    相关资源
    最近更新 更多