2014-10-02 6 views
0

У меня есть представление, которое имеет эту структуру, которая представляет собой комбинацию из трех таблиц, для которых мне нужно сравнить значения в каждом числовом столбце (OCT_14, NOV_14, ETC.).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, CODE AND 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

+0

Это отлично работает ..! Спасибо :) Если мне нужно ограничить данные, используя оператор where, куда бы он пошел? – Ewaver

+0

Я изменил его, текст в ddl преобразовал значение в числовое istead десятичного числа. – radar