我有一个来自SQL Server的SQL select语句,它从动态表中将文本放在一起并创建一个union语句。然后,我将此语句复制到Oracle SQL Developer中以访问Oracle数据库以获取计数或最小/最大列,或者其他任何内容。我的查询与此类似:
'Select ' + a.column1 + 'from' + a.tablename + 'where ' + a.column1 + '= 123' + 'UNION ALL'
from Mytable a where a.tablename = 'MYTABLENAMEHERE'
然后我得到一个包含20个表的列表,然后将其剪切/粘贴到Oracle中以获得结果。
我的问题是(这可能是一个愚蠢的问题,我只想知道如何在SQL中执行)是最后一条记录的输出在其末尾有“UNION ALL”而没有“;” Oracle需要这样我总是要在最后一条记录中将其删除。
如何判断SQL何时替换“UNION ALL”并替换为“;”终结器声明,以便当我剪切并粘贴它时,我不必每次都删除它?
对专家们好奇!
答案 0 :(得分:1)
如果当前记录是最后一个记录,您可以查看案例句子,在这种情况下,不打印UNION ALL:
select 'Select ' + a.column1 + 'from' + a.tablename + 'where ' + a.column1 + '= 123'
+ case when (select count(*) from Mytable where tablename=a.tablename)=ROW_NUMBER() OVER(order by a.tablename desc) then ';' else ' UNION ALL' end
from Mytable a where a.tablename = 'MYTABLENAMEHERE'