SQL条件字段检索

时间:2016-04-26 20:46:54

标签: sql sql-server

我有一种情况,我试图为第二天有约会的人提取会员电话号码。问题是数据存储在数据库中的方式。 MEMBERS表有四个字段:phone1,phone2,phone3,phone4,另外还有phone1label,phone2label,phone3label和phone4label四个字段。在用户界面中,用户可以通过下拉菜单4具有移动功能来具体说明吃什么电话号码。因此,有没有办法只为每个MEMBER记录拉回字段,其中电话号码=' 4'?例如,John Doe可能在phone1中使用phone1label =' 4'和John Q Public可能会在现场phone2中使用phone2label =' 4'。

然后我需要将此逻辑添加到以下查询中:

SELECT SCSERVICES.servicecode,
       SCSERVICES.servicename,
       SCSESSIONS.scheduleid,
       SCSERVICES.servicetype,
       SCSERVICECATEGORIES.servicecategory,
       SCSCHEDULES.scheduledatefrom,
       MEMBERS.lname,
       MEMBERS.fname,
       MEMBERS.phone1,
       MEMBERS.phone2,
       MEMBERS.phone3,
       MEMBERS.phone4,
       MEMBERS.phone1label,
       MEMBERS.phone2label,
       MEMBERS.phone3label,
       MEMBERS.phone4label,
       SCSCHEDULES.timestart,
       SCSCHEDULES.schedulestatus
FROM SCSESSIONS
INNER JOIN SCSERVICES ON SCSESSIONS.serviceid = SCSERVICES.serviceid
INNER JOIN SCSERVICECATEGORIES ON SCSERVICES.servicecategoryid = SCSERVICECATEGORIES.servicecategoryid
INNER JOIN SCSCHEDULES ON SCSESSIONS.scheduleid = SCSCHEDULES.scheduleid
INNER JOIN MEMBERS ON SCSCHEDULES.memid = MEMBERS.memid
WHERE (SCSERVICECATEGORIES.servicecategory = 'Spa')
  AND (SCSERVICES.siteid = '779')
  AND (CAST(SCSCHEDULES.scheduledatefrom AS DATE) = '04-27-2016')
  AND (SCSCHEDULES.schedulestatus = '1')

1 个答案:

答案 0 :(得分:3)

您可以使用CASE声明:

CASE WHEN phone1label = '4' THEN phone1
     WHEN phone2label = '4' THEN phone2
     WHEN phone3label = '4' THEN phone3
     WHEN phone4label = '4' THEN phone4
END AS MobilePhone

请注意,如果将电话​​号码规范化为单独的表而不是每个记录有多个字段,那么它会更清晰。

相关问题