簡體   English   中英

Oracle SQL,用於比較同一列中的數值

[英]Oracle SQL for Comparing numerical values in the same column

我有一個具有這種結構的視圖,該結構是3個表的組合,我需要針對這些表比較每個數字列(OCT_14,NOV_14,ETC。)中的值。

TABLE    PERIOD  COUNTRY  CODE  POSITION  OCT_14  NOV_14  DEC_14
TABLE_1  Q1      UK       123   EMPL      .2      .2      .2
TABLE_2  Q1      Uk       123   EMPL      .2      .2      .2
TABLE_3  Q1      UK       123   EMPL      .3      .4      .4

在上一篇文章中為我提供了以下代碼,但是我需要澄清的事情很少。

如何使用Oracle SQL比較同一列中多個列的數值

我在查詢中需要其他字段(PERIOD,COUNTRY,CODE和POSITION),並且每個字段都會創建一個唯一的ID。 比較將在查詢中發生,查詢將返回比較行,其中每個表的(PERIOD,COUNTRY,CODE和POSITION)相同。 最終,比較行將這樣返回。

TABLE    PERIOD  COUNTRY  CODE  POSITION  OCT_14  NOV_14  DEC_14
TABLE_1  Q1      UK       123   EMPL      .2      .2      .2
TABLE_2  Q1      Uk       123   EMPL      .2      .2      .2
TABLE_3  Q1      UK       123   EMPL      .3      .4      .4
COMPARE                                   ATTN     ATTN    ATTN

當我運行此查詢時,使用此查詢而不是ATTN為比較行獲取空值。 我相信是因為缺少這種獨特的元素。 謝謝你的盡心幫助。

這是上一篇文章中的代碼:

Create Table V(TName VARCHAR(5), Oct_14 NUMBER(5,2), Nov_14 NUMBER(5,2), Dec_14 NUMBER(5,2));

Insert into V values('T1', 1.2, 1.2, 1.2);
Insert into V values('T2', 1.4, 1.5, 1.6);
Insert into V values('T3', 1.5, 1.5, 1.7);

SELECT TName, To_Char(Oct_14) Oct_14, To_Char(Nov_14) Nov_14, To_Char(Dec_14) Dec_14 from V
UNION
SELECT 'Compare', 
(select 'ATTN' from dual where EXISTS (select 1 from V where TName = 'T3' and OCT_14 > ALL(SELECT
 OCT_14 FROM V WHERE TName IN ('T1','T2')))) Oct_14_Res,
(select 'ATTN' from dual where EXISTS (select 1 from V where TName = 'T3' and Nov_14 > ALL(SELECT
 Nov_14 FROM V WHERE TName IN ('T1','T2')))) Nov_14_Res,
(select 'ATTN' from dual where EXISTS (select 1 from V where TName = 'T3' and Dec_14 > ALL(SELECT
Dec_14 FROM V WHERE TName IN ('T1','T2')))) Dec_14_Res
FROM dual;

這是SQL Fiddle演示: http ://www.sqlfiddle.com/#!4/1462f7 /3

select "TABLE", "PERIOD", "COUNTRY", "CODE", "POSITION", to_char(Oct_14) Oct_14 , To_Char(Nov_14) Nov_14, To_Char(Dec_14) Dec_14  from Table1
union 
select 'COMPARE', '','', NULL, '',
(select 'ATTN' from dual where EXISTS (select 1 from Table1 where "TABLE" = 'TABLE_3' and OCT_14 > ALL(SELECT OCT_14 FROM Table1 WHERE "TABLE" IN ('TABLE_1','TABLE_2')))) Oct_14_Res,
(select 'ATTN' from dual where EXISTS (select 1 from Table1 where "TABLE" = 'TABLE_3' and Nov_14 > ALL(SELECT Nov_14 FROM Table1 WHERE "TABLE" IN ('TABLE_1','TABLE_2')))) Nov_14_Res,
(select 'ATTN' from dual where EXISTS (select 1 from Table1 where "TABLE" = 'TABLE_3' and Dec_14 > ALL(SELECT Dec_14 FROM Table1 WHERE "TABLE" IN ('TABLE_1','TABLE_2')))) Dec_14_Res
FROM dual;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM