Sql 查询以在表列为空时添加默认值
我有一个表,其中boa_user返回三个用户asSql 查询以在表列为空时添加默认值,sql,database,oracle,Sql,Database,Oracle,我有一个表,其中boa_user返回三个用户as 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 以下是格式
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
现在库尔曼是那种类型的
name VARCHAR2(30)
updateddate TIMESTAMP(6)
现在,查询返回结果,但在这中间有一些列,其中name值为null,updateDate值为null
我的查询是请建议一个查询,如果名称为null,更新日期为null,那么它的defalut值应该类似于“AFGT”,而updateDate默认值应该是“05.03.13 05:29:34”,“MM.DD.YY HH:MI”
如果名称和更新日期为空,请建议查询添加这些默认值。如果我理解正确,当
名称为空,更新日期为空,您要使用:
name = 'AFGT'
updateddate = TO_TIMESTAMP('05.03.13 05:29:34', 'MM.DD.YY HH:MI')
如果这是正确的,您需要的只是一个案例
但是,这取决于您是否希望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;
在“选择零件”中使用
诸如此类:
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
选择DISTINCT
nvl(美国名称,),
u、 更新人:,
nvl(u.UpdateDate,)
来自YTR_用户u、YTR_用户u组ug、YTR_组g
其中u.id=ug.user\u id
和ug.group_id=g.id
和u.ACTIVE_FLAG='Y'
和g.id不在(13,11,15)
按美国名称订购
请注意,我希望您希望在name为null时使用默认名称值
或updatedate为null时使用默认updatedate值
。你的问题在这里有点不清楚
因此,当name为null且updateDate不为null时,上述语句也将返回默认名称。无论其他字段是否为空,只要相应字段为空,它就会返回默认值。ORA-01791:不是选定的表达式。.获取此信息ERROR@GovindMathur对不起,我的错。我不知道是否要重复默认的每一行,因此我添加了两个变量非常感谢您的帮助,但在执行时,这次出现了此错误..ORA-00933:SQL命令不正确ended@GovindMathur因为你得到的错误和Fabian Barney的答案一样,您能粘贴到这里吗?在sqlplus
中它是什么样子的(查询和错误)?执行时获取此错误。。ORA-00933:SQL命令不正确,所以请让我知道我在单引号中输入的默认名称,如“AAA”,以及类似的日期