2016-04-26 17 views
1

Ich habe eine Situation, in der ich versuche, Mitglieder Telefonnummern für diejenigen zurück, die Termine für den nächsten Tag haben. Das Problem ist die Art und Weise, in der Daten in der Datenbank gespeichert werden. Die MITGLIEDER-Tabelle hat vier Felder: phone1, phone2, phone3, phone4, mit vier zusätzlichen Feldern von phone1label, phone2label, phone3label und phone4label. In der Benutzeroberfläche kann der Benutzer festlegen, welche Telefonnummer aus einem Drop-down-Menü besteht, wobei 4 Mobilgeräte sind. Gibt es also eine Möglichkeit, nur das Feld für jeden Mitgliedsdatensatz zurückzuziehen, wo das Telefon # label = '4' ist? Zum Beispiel könnte John Doe seine Handynummer in phone1 mit phone1label = '4' haben und John Q Public könnte seine Handynummer im Feld phone2 mit phone2label = '4' haben.SQL Conditional Field Retrieval

Dann brauche ich diese Logik auf die folgende Abfrage hinzuzufügen:

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') 
+0

Kann jemand mehr als eine Handynummer haben? –

Antwort

3

können Sie verwenden, um eine CASE Aussage:

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

Beachten Sie, dass es sauberer wäre, wenn die Telefonnummern wurden normalisiert in eine separate Tabelle, anstatt mehrere Felder pro Datensatz zu haben.

+0

FANTASTISCH! Vielen Dank!!!! Ich stimme Ihnen mit dem Aufbau der Telefonnummern zu, aber ich beschäftige mich mit der Erstellung von benutzerdefinierten Berichten für eine Box-Software. – Merlin

+0

@Merlin Froh, es hat funktioniert. Verstehen Sie die Legacy-Software - machen Sie einfach einen Vorschlag, wenn Sie anfangen, Box-Software zu schreiben :) –