2010-09-07 3 views
2

Voilà ce que je voudrais faire:Sélectionnez plusieurs colonnes à la suite d'une expression de cas

case p.residency_status 
    when 0 then 
     dbo.fn_formatAddress(r1.prm_name, p.py_hospital, p.py_address1, p.py_city, p.pyear_state) 
    when 1 then 
     dbo.fn_formatAddress(r1.prm_name, p.respgm_hospital, p.respgm_address1, p.respgm_city, p.respgm_state) 
    when 2 then 
     dbo.fn_formatAddress(r1.prm_name, p.curr_hospital, p.curr_address1, curr.city, p.curr_state) 
end 

Est-il possible de le faire? Essentiellement, basé sur residency_status, je vais devoir passer différents paramètres à une fonction.

Répondre

2

Oui, mais vous ne pouvez pas utiliser la structure de cas dans T-SQL de la même manière que vous êtes probablement habitué à utiliser la casse de sélection comme structure de contrôle. La syntaxe dans ce cas (heh) serait plus semblable à ce qui suit.

Select 
case 
    when p.residency_status = 0 then 
     dbo.fn_formatAddress(r1.prm_name, p.py_hospital, p.py_address1, p.py_city, p.pyear_state) 
    when p.residency_status = 1 then 
     dbo.fn_formatAddress(r1.prm_name, p.respgm_hospital, p.respgm_address1, p.respgm_city, p.respgm_state) 
    when p.residency_status = 2 then 
     dbo.fn_formatAddress(r1.prm_name, p.curr_hospital, p.curr_address1, curr.city, p.curr_state) 
end 
from 
table p 
0

Si vous avez besoin des champs individuels en dehors de la fonction, aussi, vous pouvez le faire sous-sélection comme ceci:

SELECT 
    *, 
    dbo.fn_formatAddress(
    prm_name, 
    resident_hospital, 
    resident_address1, 
    resident_city, 
    resident_state 
) FormattedAddress 
FROM 
    (
    SELECT 
     r1.prm_name, 
     ..., 
     CASE p.residency_status 
     WHEN 0 THEN p.py_hospital 
     WHEN 1 THEN p.respgm_hospital 
     WHEN 2 THEN p.curr_hospital 
     END resident_hospital, 
     CASE p.residency_status 
     WHEN 0 THEN p.py_address1 
     WHEN 1 THEN p.respgm_address1 
     WHEN 2 THEN p.curr_address1 
     END resident_address1, 
     CASE p.residency_status 
     WHEN 0 THEN p.py_city 
     WHEN 1 THEN p.respgm_city 
     WHEN 2 THEN p.curr_city 
     END resident_city, 
     CASE p.residency_status 
     WHEN 0 THEN p.pyear_state 
     WHEN 1 THEN p.respgm_state 
     WHEN 2 THEN p.curr_state 
     END resident_city 
    FROM 
     r1 INNER JOIN p ON p.someField = r1.someField 
    WHERE 
     someCondition = 1 
) AS InnerQuery 
Questions connexes