2013-08-01 52 views
1

我在其中boa_user,它会返回三个用户为表..查询添加默认值,如果表中的列是空的

SELECT DISTINCT u.name, u.updated_by, u.updateddate 
FROM YTR_USER u, YTR_user_group ug, YTR_group g 
WHERE u.id = ug.user_id 
    AND ug.group_id = g.id 
    AND u.ACTIVE_FLAG='Y' 
    AND g.id not in (13,11,15) 
ORDER BY u.name 
下面

是格式..

NAME UPDATED_BY UPDATEDDATE 
AAA  edfef  03.03.03 14:29:34.000 
BBB  ferer  12.12.12 15:13:23.756 

现在coulmn是类型

name  VARCHAR2(30) 
updateddate TIMESTAMP(6) 

现在仪表现在查询返回的结果,但之间有一些名称值为nu ll和updateddate值为空。

我的查询是请建议一个查询,以便如果名称为空并且更新日期为null,那么它的defalut值应该像“AFGT”AND updateddate默认值应该是'05 .03.13 05:29:34', “MM.DD.YY HH:MI”

请告知查询,如果名称和更新的日期是空

回答

0

如果我理解正确的话,当name IS NULL AND updateddate IS NULL要使用添加这些默认值:

name = 'AFGT' 
updateddate = TO_TIMESTAMP('05.03.13 05:29:34', 'MM.DD.YY HH:MI') 

如果这是正确的,你需要的只是一个CASE

但是,这取决于您是否希望DISTINCT适用于默认行或不。如果你这样做,然后使用:

SELECT DISTINCT x.corrected_name, x.corrected_updateddate 
FROM (
    SELECT 
     CASE WHEN u.name IS NULL AND u.updateddate IS NULL 
      THEN 'AFGT' 
      ELSE u.name 
     END AS corrected_name, 
     u.updated_by, 
     CASE WHEN u.name IS NULL AND u.updateddate IS NULL 
      THEN TO_TIMESTAMP('05.03.13 05:29:34', 'MM.DD.YY HH:MI') 
      ELSE u.updateddate 
     END AS corrected_updateddate 
    FROM YTR_USER u, YTR_user_group ug, YTR_group g 
    WHERE u.id = ug.user_id 
     AND ug.group_id = g.id 
     AND u.ACTIVE_FLAG='Y' 
     AND g.id not in (13,11,15) 
    ORDER BY u.name 
) AS x; 
如果你希望所有 默认的结果

:在选择部分

SELECT x.corrected_name, x.corrected_updateddate 
FROM (
    SELECT DISTINCT 
     CASE WHEN u.name IS NULL AND u.updateddate IS NULL 
      THEN 'AFGT' 
      ELSE u.name 
     END AS corrected_name, 
     u.updated_by, 
     CASE WHEN u.name IS NULL AND u.updateddate IS NULL 
      THEN TO_TIMESTAMP('05.03.13 05:29:34', 'MM.DD.YY HH:MI') 
      ELSE u.updateddate 
     END AS corrected_updateddate, 
     u.name, 
     u.updateddate 
    FROM YTR_USER u, YTR_user_group ug, YTR_group g 
    WHERE u.id = ug.user_id 
     AND ug.group_id = g.id 
     AND u.ACTIVE_FLAG='Y' 
     AND g.id not in (13,11,15) 
    ORDER BY u.name 
) AS x; 
+0

ORA-01791:不是一个SELECTed expression..GETTING这个错误 –

+0

@GovindMathur对不起,我的坏。我不知道如果你想重复每一行是默认或不是,所以我添加了两个变种 –

+0

非常感谢大的帮助,但执行后得到这个错误这次..ORA-00933:SQL命令没有正确结束 –

2

使用NVL-Function

类似的东西:

SELECT DISTINCT 
    nvl(u.name, <defaultname>), 
    u.updated_by, 
    nvl(u.updateddate, <deafultdate>) 
FROM YTR_USER u, YTR_user_group ug, YTR_group g 
WHERE u.id = ug.user_id 
    AND ug.group_id = g.id 
    AND u.ACTIVE_FLAG='Y' 
    AND g.id not in (13,11,15) 
ORDER BY u.name 

要知道,我希望你想要的默认名称值时name is null默认updateddate值时updateddate is null。你的问题在这里有点不清楚。

因此,例如上面的语句也会在name为null且updateddate不为null时返回default-name。它只是在相应的字段为空时返回默认值 - 不管其他字段是否为空。

+0

得到这个错误后执行.. ORA-00933:SQL命令未正确结束 –

+0

也请让我知道默认名称我把单引号里面'AAA'和类似日期也 –

相关问题