【问题标题】:join 2 views with a condition based on 3 fields基于 3 个字段的条件加入 2 个视图
【发布时间】:2015-02-11 19:23:59
【问题描述】:

在 SQL Server 2012 中编写查询以加入这 2 个视图 - 活动和服务。 考虑这个条件

所有响应跟踪都需要在 BP、手机和电子邮件 ID 级别上完成。

如果 BP 为空,则 Mobilenumber 或 emailid 或如果手机号码为空,则采用 BP 或 emailid 或如果电子邮件 ID 为空,则使用手机号码或 BP。

将所有 3 个参数放在一起,无论其他 2 个字段是否填写,3 个键中的每一个都将与各自的服务报告进行比较,最终结果是 3 个键结果的或。

我是这样开始的,但它不完整且没有意义。

select * from [dbo].[Campaign] left outer join 
              [dbo].[Services] on [Campaign].[Email]=[Services].[Email]
where [dbo].[Campaign].[Email] is not null and [dbo].[Campaign].[Mobile]is not null

显示两个视图的所有字段的屏幕截图

谢谢, 男子气概

【问题讨论】:

  • 不要在此处添加屏幕截图,尝试键入所有必需的数据。
  • 这是列,而不是字段...
  • 很难理解你在说什么?您想检查 2 键组合,以防 3rd 是 null 我得到的那部分,但在那之后您所说的就无法理解了。能不能说的更清楚一点。

标签: sql sql-server join null tableau-api


【解决方案1】:

你可以这样尝试,(试着理解背后的想法,这样你就可以根据自己的需要进行修改。

SELECT *
FROM [dbo].[Campaign]
LEFT OUTER JOIN [dbo].[Services] ON (
        ([Campaign].[Email] = [Services].[Email])
        OR ([Campaign].[Mobile] = [Services].[Mobile])
        )
WHERE [dbo].[Campaign].[bp] IS NULL

UNION ALL

SELECT *
FROM [dbo].[Campaign]
LEFT OUTER JOIN [dbo].[Services] ON (
        ([Campaign].[Email] = [Services].[Email])
        OR ([Campaign].[bp] = [Services].[bp])
        )
WHERE [dbo].[Campaign].[Mobile] IS NULL

UNION ALL

SELECT *
FROM [dbo].[Campaign]
LEFT OUTER JOIN [dbo].[Services] ON (
        ([Campaign].[Mobile] = [Services].[Mobile])
        OR ([Campaign].[bp] = [Services].[bp])
        )
WHERE [dbo].[Campaign].Email] IS NULL

【讨论】:

    【解决方案2】:

    这样试试

    SELECT *
    FROM   [dbo].[Campaign] c
           LEFT OUTER JOIN [dbo].[Services] s
                        ON CASE
                             WHEN c.bp IS NULL
                                  AND ( c.email = s.email
                                         OR c.mobile = s.mobile ) THEN 1
                             WHEN c.Mobile IS NULL
                                  AND ( c.email = s.email
                                         OR c.bp = s.bp ) THEN 1
                             WHEN c.email IS NULL
                                  AND ( c.bp = s.bp
                                         OR c.mobile = s.mobile ) THEN 1
                             ELSE 0
                           END = 1
    WHERE  [dbo].[Campaign].[Email] IS NOT NULL
           AND [dbo].[Campaign].[Mobile]IS NOT NULL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      相关资源
      最近更新 更多