【问题标题】:ETL - query neededETL - 需要查询
【发布时间】:2016-06-30 14:52:23
【问题描述】:

有 3 个表相同的列但具有不同的值..result 应该只有相同的组合才会在结果集中打印

示例 表一

col x  col y
23     a01
23     a02
24     a11
25     a12

表b

col x  col y
23     a10
23     a02
24     a11
25     a12

表c

col x  col y
23     a01
23     a02
24     a11
25     a12

希望结果为

col x  col y
24     a11
25     a12

请帮我们查询

【问题讨论】:

标签: sql etl


【解决方案1】:

不熟悉 ETL,但如果只是简单的 SQL,应该是这样的:

select a.*
from a
inner join b on a.x = b.x and a.y=b.y
inner join c on a.x = c.x and a.y=c.y

【讨论】:

  • ETL 的意思是“提取、转换、加载”,通常是指将数据从一种格式转换为另一种格式。这不是一项特定的技术。
【解决方案2】:

如果要识别不同表中的相同行,可以使用 INTERSECT 运算符

WITH CTE_T1 AS
(
   SELECT [X] ,[Y]
   FROM
      (VALUES  
          (23, 'a01')
         ,(23, 'a02')
         ,(24, 'a11')
         ,(25, 'a12')
     ) T1([X],[Y])
),
CTE_T2 AS
(
   SELECT [X] ,[Y]
   FROM
      (VALUES  
          (23, 'a10')
         ,(23, 'a20')
         ,(24, 'a11')
         ,(25, 'a12')
     ) T2([X],[Y])
),
CTE_T3 AS
(
   SELECT [X] ,[Y]
   FROM
      (VALUES  
          (23, 'a40')
         ,(23, 'a50')
         ,(24, 'a11')
         ,(25, 'a12')
     ) T3([X],[Y])
)
SELECT [X],[Y] FROM CTE_T1
INTERSECT 
SELECT [X],[Y] FROM CTE_T2
INTERSECT 
SELECT [X],[Y] FROM CTE_T3

此语句产生以下结果

X           Y
----------- ----
24          a11
25          a12

(2 row(s) affected)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多