2014-10-02 79 views
0

我有一個視圖,該結構是3個表的組合,我需要比較每個數值列(OCT_14,NOV_14等)中的值。Oracle SQL用於比較同一列中的數值

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 

我在之前的文章中提供了下面的代碼,但是我需要澄清的東西很少。

How to compare numerical values in the same columns for multiple columns using Oracle SQL

我所需要的附加字段(PERIOD,COUNTRY,代碼和位置)查詢和每個這些創建一個唯一的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; 

回答

0

這裏是SQL小提琴演示: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; 
+0

Hi..thanks此拉傑什。在你的SQL Fiddle演示中,從查詢中拉出的所有值都是0.00,所以它看起來並沒有任何比較。任何想法爲什麼,因爲該表具有OCT,NOV和DEC 2014的價值?謝謝, – Ewaver 2014-10-02 16:28:48

+0

這很好.. ..!謝謝:)如果我需要限制數據使用where語句它會去哪裏? – Ewaver 2014-10-02 16:38:26

+0

我修改了它,文本以ddl轉換後的值爲數字而不是小數。 – radar 2014-10-02 16:47:00