2011-10-07 37 views
1

我试图更改保存的值的名称,当我执行我的SQL脚本过程中更改数值名称:如何输出

SELECT 
    PERSONNUM, 
    PAYCODENAME, 
    CAST(WFCTIMEINSECONDS AS FLOAT)/3600 AS Total_Hours 
FROM 
    VP_ALLTOTALS 
WHERE 
    Applydate >= '09/25/2011' AND 
    Applydate <= '10/01/2011' AND 
    PAYCODENAME IN ('Vacation' 
        ,'Sick Leave - Paid' 
        ,'Personal Business - Paid' 
        ,'Comp Time - Paid' 
        ) 

我希望假期是VAC,病假 - 付费是SIC,个人业务 - 已付费PER和

+0

您使用的是什么RDBMS? –

回答

3

最简单的方法是CASE替代选项列表。

SELECT PERSONNUM 
     PAYCODENAME CASE WHEN 'Vacation' THEN 'VAC' 
         WHEN 'Sick Leave - Paid' THEN 'SIC' 
         WHEN 'Personal Business - Paid' THEN 'PER' 
         ELSE PAYCODENAME END AS PAYCODENAME 
     .... 
0

使用CASE声明:

SELECT 
    PERSONNUM, 
    CASE PAYCODENAME 
    WHEN 'VACATION' THEN 'Vac' 
    WHEN 'Sick Leave - Paid' THEN 'SIC' 
    WHEN 'Comp Time - Paid' THEN 'PER' 
    ELSE PAYCODENAME 
    END, 
    cast(WFCTIMEINSECONDS as float)/3600 as Total_Hours 
FROM 
    VP_ALLTOTALS 
WHERE 
    Applydate >= '09/25/2011' AND 
    Applydate <= '10/01/2011' AND 
    PAYCODENAME in ('Vacation' 
    ,Sick Leave - Paid' 
    ,'Personal Business - Paid' 
    ,'Comp Time - Paid' 
    ) 
+0

-1 - 如果在'CASE'中没有'ELSE',那么你没有明确处理的任何值都会变成'NULL' – JNK

+0

@JNK谢谢...修正。 – garnertb

+0

现在,它完全像我的答案,但后张贴了一分半钟:) – JNK

0

可以代替使用永久表,派生表,或公共表表达式(须在RDBMS中的可用性)与映射,并加入到该in列表。

WITH PAYCODES(PAYCODENAME, LABEL) 
    AS (SELECT 'Vacation', 
       'VAC' 
     UNION ALL 
     SELECT 'Sick Leave - Paid', 
       'SIC' 
     UNION ALL 
     SELECT 'Personal Business - Paid', 
       'PER' 
     UNION ALL 
     SELECT 'Comp Time - Paid', 
       '') 
SELECT PERSONNUM, 
     LABEL AS PAYCODENAME, 
     CAST(WFCTIMEINSECONDS AS FLOAT)/3600 AS Total_Hours 
FROM VP_ALLTOTALS 
     JOIN PAYCODES 
     ON PAYCODES.PAYCODENAME = VP_ALLTOTALS.PAYCODENAME 
WHERE Applydate >= '09/25/2011' 
     AND Applydate <= '10/01/2011'