我需要编写一个查询,它接受行并将其转换为列 - 这是我的表:
Count fname lname id
-----------------------------
1 abc def 20
2 pqr 20
3 abc xyz 20
4 xyz xyz 20
1 abc def 21
1 pqr xyz 22
2 abc abc 22
Run Code Online (Sandbox Code Playgroud)
这是我想要产生的输出:
id fname lname fname lname fname lname fname lname
-------------------------------------------------------------
20 abc def pqr NULL abc xyz xyz xyz
21 abc def NULL NULL NULL NULL NULL NULL
22 abc abc NULL NULL NULL NULL NULL NULL
Run Code Online (Sandbox Code Playgroud)
每个id的最大计数值是4.我正在使用Oracle 9i.
SELECT YEAR, period, round((1- sum(rej_qty) / sum(recd_qty))*100, 0)
FROM TAB_A
WHERE sid = '200'
AND sdid IN ('4750')
AND
(
(
YEAR ='2011'
AND period IN('01_JAN')
)
OR
(
YEAR = '2010'
AND period IN('02_FEB','03_MAR','04_APR','05_MAY','06_JUN','07_JUL','08_AUG','09_SEP','10_OCT','11_NOV','12_DEC')
)
)
group by year, period
Run Code Online (Sandbox Code Playgroud)
对于特定月份,recd_qty为零,因为我得到了DIVIDE BY ZERO错误.
有什么方法可以避免DIVIDE BY ZERO错误吗?
我有什么方法可以忽略那个特定的月份?
为什么这两个查询之间存在如此巨大的性能差异?
-- (89 seconds)
SELECT max(mydate) FROM mytable WHERE eqpid = 'ABCDEFG'
AND mydate < sysdate - 5
Run Code Online (Sandbox Code Playgroud)
与
-- (0.6 seconds)
SELECT max(mydate) FROM mytable WHERE eqpid = 'ABCDEFG'
AND mydate < TO_DATE('05/27/2011 03:13:00', 'MM/DD/YYYY HH24:MI:SS') -- 5 days ago
Run Code Online (Sandbox Code Playgroud)
无论索引如何,似乎to_date和sysdate都只返回"某个日期值".
注意:此表上存在一个复合索引,包括eqpid和另外两列.mydate也存在索引.两者都是b树.大约有2900万行.
为什么优化器会选择这些明显不同的(在一种情况下,可怕的)计划?
假设您有以下更新:
Update table set col1 = func(col2)
where col1<>func(col2)
Run Code Online (Sandbox Code Playgroud)
该FUNC函数为每个行计算两次,每行,或一次?
谢谢,
我有一个我在SQL Server中使用的脚本,但我需要将其转换为Oracle格式.有人可以帮忙吗?
UPDATE PERSONS P SET
P.JOBTITLE=TE.JOBTITLE,
P.LAST_NAME=TE.LAST_NAME,
P.FIRST_NAME=TE.FIRST_NAME,
P.DBLOGIN_ID=TE.DBLOGIN_ID,
P.EMAIL_ID=TE.EMAIL_ID,
P.USERLEVEL=TE.USERLEVEL,
P.FACILITY_ID=TE.FACILITY_ID,
P.SUPERVISOR=TE.SUPERVISOR,
P.DEPARTMENT=TE.DEPARTMENT,
P.WINLOGINID=TE.WINLOGINID
FROM TEMP_ECOLAB_PERSONS TE
WHERE P.PERSON=TE.PERSON;
Run Code Online (Sandbox Code Playgroud)
- 从下面的文章中我得出以下声明.不幸的是,它仍然不起作用:
UPDATE (SELECT P.JOBTITLE, P.LAST_NAME, P.FIRST_NAME, P.DBLOGIN_ID, P.EMAIL_ID,
P.USERLEVEL, P.FACILITY_ID, P.SUPERVISOR, P.DEPARTMENT,
TE.JOBTITLE, TE.LAST_NAME, TE.FIRST_NAME, TE.DBLOGIN_ID, TE.EMAIL_ID,
TE.USERLEVEL, TE.FACILITY_ID, TE.SUPERVISOR, TE.DEPARTMENT
FROM PERSONS P, TEMP_ECOLAB_PERSONS TE WHERE P.PERSON=TE.PERSON)
SET
P.JOBTITLE=TE.JOBTITLE,
P.LAST_NAME=TE.LAST_NAME,
P.FIRST_NAME=TE.FIRST_NAME,
P.DBLOGIN_ID=TE.DBLOGIN_ID,
P.EMAIL_ID=TE.EMAIL_ID,
P.USERLEVEL=TE.USERLEVEL,
P.FACILITY_ID=TE.FACILITY_ID,
P.SUPERVISOR=TE.SUPERVISOR,
P.DEPARTMENT=TE.DEPARTMENT;
Run Code Online (Sandbox Code Playgroud) 如何在oracle数据库(9i)中找到高水位线(历史最大并发用户数).
我在Oracle中遇到以下错误:
SELECT * FROM abcd WHERE name LIKE 'a%' LIMIT 10
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
Run Code Online (Sandbox Code Playgroud)
这个命令有什么问题?
有没有人可以帮助我获得位图索引和反向键索引的逻辑表示?
作为我正在谈论的标题,跟踪oracle数据变化的最佳方法是什么?我只是想知道哪一行被更新/删除/插入?
起初我想到了触发器,但是我需要在每个表上写下更多的触发器,然后记录下影响到我的更改表的rowid,这不好,然后我在Google中搜索,学习有关物化视图日志和更改的新概念数据抓取,
物化视图日志对我有好处,我可以将它与原始表进行比较然后我可以得到不同的记录,甚至不同的字段,我认为方式是相同的我从原始创建/复制新表(但我不不知道有什么不同吗?);
改变数据捕获组件对我来说很复杂:),所以我不想浪费我的时间来研究它.
任何人都有经验是跟踪oracle数据变化的最佳方法吗?
我想创建一个批处理文件,它将打开SQLPLUS [CLI]并执行一些存储的sql文件,并将输出存储到文本文件中.
所以我创建了这个批处理文件[不起作用].
这些SQL文件包含SQL,它返回表中的最大数字.
sqlplus scott/tiger@DB
@sql1.sql>data1.txt
@sql2.sql>data2.txt
Run Code Online (Sandbox Code Playgroud)
问题是它在打开SQLPLUS后不执行SQL文件
oracle9i ×10
sql ×7
oracle ×6
plsql ×2
batch-file ×1
cdc ×1
database ×1
ora-00933 ×1
performance ×1
pivot ×1
session ×1
sql-update ×1
sqlplus ×1
triggers ×1