加入2个表格并按ID,优先级和&数

时间:2017-01-20 12:24:55

标签: mysql sql-server oracle

示例表和所需结果: 下面显示的结果表是我实际想要的输出。

1

使用pivot尝试了以下查询:

with pivot_data AS
(
  select client_id
        ,ph_type
        ,Ph_number
  from client_table
    inner join phone_table
      on client_table.phone_id = phone_table.ph_id
)
select *
from pivot_data
pivot (sum(ph_number)
       for ph_type in ('c','w','h')
      );

结果我得到了:

2

任何帮助将不胜感激。 在sql server中的答案会很棒但是oracle&如果他们可以指出我正确的方向,也欢迎mysql。 :)
提前谢谢。

2 个答案:

答案 0 :(得分:0)

Oracle查询

SELECT *
FROM   (
  SELECT client_id, priority, phone_number, phone_type
  FROM   client_table c
         LEFT OUTER JOIN
         phone_table p
         ON ( c.phone_id = p.phone_id )
)
PIVOT ( MAX( phone_type ) AS phonetype, MAX( phone_number ) AS phonenumber
        FOR priority IN ( 1 AS Prio1, 2 AS Prio2, 3 AS Prio3 ) );

<强>输出

 CLIENT_ID PRIO1_PHONETYPE PRIO1_PHONENUMBER PRIO2_PHONETYPE PRIO2_PHONENUMBER PRIO3_PHONETYPE PRIO3_PHONENUMBER
---------- --------------- ----------------- --------------- ----------------- --------------- -----------------
         1 C               9999999999        H               5555555555        W               7777777777        

答案 1 :(得分:0)

你真的需要在set based thinking上做一些阅读,而你所要求的内容对你保持向前推进的SSIS解决方案是非常不利的。

您需要做的就是按原样导出数据。如果你绝对必须在一个CSV文件中拥有它,只需将join两个表放在一起,并保留一个规范化的,可扩展的数据集,如果优先级的数量增加,它将不会中断:

select c.client_id
        ,c.phone_id
        ,c.priority
        ,p.phone_type
        ,p.phone_number
from @Client c
    join @Phone p
        on c.phone_id = p.phone_id