PIVOT将表与sql中的条件组合在一起

时间:2017-07-02 21:51:35

标签: sql

我有2张桌子

enter image description here

我想显示返回所有同时包含工作和家庭号码

的行的结果

RESULT

enter image description here

我写过这个SQL,但它显示了所有。如何显示仅出现在家庭和工作号码中具有这两个值且未显示空值的那些人。我尝试添加WHERE PHONE_NUM IS NOT NULL但它不起作用。我将不胜感激任何帮助。感谢。

WITH TABLE1 AS (

   SELECT

      P.ID,
      P.NAMES,
      P.DIGIT,
      Q.NUM_TYP,
      Q.PHONE_NUM
   FROM

      dbo.TABLE1 P
      INNER JOIN dbo.TABLE2 Q
         ON P.ID = Q.ID
)

SELECT *
FROM

TABLE1

   PIVOT (Max(PHONE_NUM) FOR NUM_TYP IN (HOME, WORK)) R
 ;

1 个答案:

答案 0 :(得分:2)

您可以使用条件聚合从表2中获得结果:

select t2.id,
       max(case when t2.num_type = 'HOME' then phone_num end) as home,
       max(case when t2.num_type = 'WORK' then phone_num end) as work
from dbo.TABLE2 t2
group by t2.id
having max(case when t2.num_type = 'HOME' then phone_num end) is not null and
       max(case when t2.num_type = 'WORK' then phone_num end) is not null;

如果您愿意,可以加入表格1以获取其他字段。