Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Oracle: столбец определен неоднозначно 
:(
    Опции темы
KAV2008
Дата 15.8.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Возникла проблема использования запроса в делфи

Работающий запрос без суммы по часам выглядит так 
Код

 str:='select a2.NAME_EN '+
         ',trunc(a1.REVISION) day  '+
        ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'21'#39',val)) "21:00" '+
           ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'22'#39',val)) "22:00"  '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'23'#39',val)) "23:00"  '+
        ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'00'#39',val)) "24:00" '+
         ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'01'#39',val)) "01:00" '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'02'#39',val)) "02:00"  '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'03'#39',val)) "03:00"  '+
        ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'04'#39',val)) "04:00" '+
         ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'05'#39',val)) "05:00" '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'06'#39',val)) "06:00"  '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'07'#39',val)) "07:00"  '+
        ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'08'#39',val)) "08:00" '+
   'from  lev3.ARC_TAG a1, lev3.REF_TAG a2 '+
   'where (a1.tag_ID=a2.Tag_ID) and (a1.REVISION BETWEEN TO_DATE('''+data1+''', ''DD/MM/YYYY HH24:MI:SS'') '+
'AND TO_DATE('''+data2+''', ''DD/MM/YYYY HH24:MI:SS'')) '+
   'group by a2.Name_EN,trunc(a1.REVISION)';


при добавлении расчета суммы 
 ,sum(case when to_number(to_char(REVISION, 'HH24')) between 8 and 20 then val else 0 end) "с 8 до 20" --! (TOAD- см выше)

В делфи писали так
      ' ,sum(case when to_number(to_char(REVISION, '#39'HH24'#39')) between 8 and 20 then val else 0 end) "с 8 до 20"'+

Возникла ошибка 
ORA-00918  столбец определен неодназначно

Подскажите пожалуйста как дополнить/исправить  запрос для Delphi




Это сообщение отредактировал(а) skyboy - 15.8.2009, 13:56
PM MAIL   Вверх
skyboy
Дата 15.8.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Цитата(KAV2008 @  15.8.2009,  07:52 Найти цитируемый пост)
Подскажите пожалуйста

если проблема в запросе(а очевидно, что проблема в запросе), почему ты приводишь delphi код вместо того, чтоб показать сформированный SQL-запрос? Сложно вывести переменную str? или нам delphi себе ставить?
PM MAIL   Вверх
KAV2008
Дата 15.8.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Запрос - работает (в TOAD) - все в нем правильно

Код

select a1.TAG_ID  
         ,trunc(REVISION) day
          ,sum(case when to_number(to_char(REVISION, 'HH24')) between 8 and 20 then val else 0 end) "с 8 до 20" --!  / расчет суммы по часам
          ,sum(decode(to_char(REVISION,'HH24'),'01',val)) "1:00"
         ,sum(decode(to_char(REVISION,'HH24'),'02',val)) "2:00"
         ,sum(decode(to_char(REVISION,'HH24'),'03',val)) "3:00"
         ---
         ,sum(decode(to_char(REVISION,'HH24'),'23',val)) "23:00"
   from  lev3.ARC_TAG a1
   where a1.REVISION BETWEEN TO_DATE('07/20/2009 01:00:00', 'MM/DD/YYYY HH24:MI:SS') 
AND TO_DATE('07/20/2009 20:00:00', 'MM/DD/YYYY HH24:MI:SS')
   group by TAG_ID,trunc(REVISION);


вставляю его в DELPHI - все работает (без расчета суммы по часам) - запрос выполняеться верно

Код

 str:='select a1.TAG_ID '+
         ',trunc(a1.REVISION) day  '+
        ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'01'#39',val)) "01:00" '+
          --
        ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'23'#39',val)) "23:00" '+
   'from  lev3.ARC_TAG a1 '+
   'where  (a1.REVISION BETWEEN TO_DATE('''+data1+''', ''DD/MM/YYYY HH24:MI:SS'') '+
'AND TO_DATE('''+data2+''', ''DD/MM/YYYY HH24:MI:SS'')) '+
   'group by a1.TAG_ID, trunc(a1.REVISION)';

Я хочу в запрос  в Delphi добавить строку рассчета суммы по часам
при добавлении расчета суммы 
 ,sum(case when to_number(to_char(REVISION, 'HH24')) between 8 and 20 then val else 0 end) "с 8 до 20" --! (TOAD- см выше)

В делфи писали так
      ' ,sum(case when to_number(to_char(REVISION, '#39'HH24'#39')) between 8 and 20 then val else 0 end) "с 8 до 20"'+

Возникла ошибка 
ORA-00918  столбец определен неодназначно

Подскажите что исправить




Это сообщение отредактировал(а) skyboy - 15.8.2009, 13:57
PM MAIL   Вверх
pseud
Дата 17.8.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



что это?
Код

sum(decode(to_char(REVISION,'HH24'),'01',val)) "1:00"

оно работает?
это склейка полученной суммы и строки?
а если так:
Код

to_char(sum(decode(to_char(REVISION,'HH24'),'01',val))) || '1:00'

Думаю в этом проблема, даже если какое-то приложение первый текст принимает.
А в дельфи, чтобы не писать непонятные #39, пользуйяся:
Код

s := 'ляляля' + QuotedStr('хохохо');



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
KAV2008
Дата 18.8.2009, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Уточню еще раз 
код в TOAD  - рабочий
Код

select a1.TAG_ID  
         ,trunc(REVISION) day
          ,sum(case when to_number(to_char(REVISION, 'HH24')) between 8 and 20 then val else 0 end) "с 8 до 20" --!  / расчет суммы по часам
          ,sum(decode(to_char(REVISION,'HH24'),'01',val)) "1:00"
         ,sum(decode(to_char(REVISION,'HH24'),'02',val)) "2:00"
         ,sum(decode(to_char(REVISION,'HH24'),'03',val)) "3:00"
         ---
         ,sum(decode(to_char(REVISION,'HH24'),'23',val)) "23:00"
   from  lev3.ARC_TAG a1
   where a1.REVISION BETWEEN TO_DATE('07/20/2009 01:00:00', 'MM/DD/YYYY HH24:MI:SS') 
AND TO_DATE('07/20/2009 20:00:00', 'MM/DD/YYYY HH24:MI:SS')
   group by TAG_ID,trunc(REVISION);


Код в делфи - рабочий
Код

str:='select a1.TAG_ID '+
         ',trunc(a1.REVISION) day  '+
        ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'01'#39',val)) "01:00" '+
          --
        ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'23'#39',val)) "23:00" '+
   'from  lev3.ARC_TAG a1 '+
   'where  (a1.REVISION BETWEEN TO_DATE('''+data1+''', ''DD/MM/YYYY HH24:MI:SS'') '+
'AND TO_DATE('''+data2+''', ''DD/MM/YYYY HH24:MI:SS'')) '+
   'group by a1.TAG_ID, trunc(a1.REVISION)';


Требуеться добавить в код в делфи строку расчета  суммы по часам
PM MAIL   Вверх
pseud
Дата 18.8.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



сделай
Код

ShowMessage(str);

нажми в вывалившемся окне Ctrl+C
Вставь скопированный текс в свой редактор (TOAD) и выполни.




--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
KAV2008
Дата 18.8.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Спасибо огромное - помогли 

В делфи писали так

Код

  ' ,sum(case when to_number(to_char(REVISION, '#39'HH24'#39')) between 8 and 20 then val else 0 end) "с 8 до 20"'+

     
действительно пропушено явное указание
смотрели код двое и в упор не видели пропущенное место

нужно было написать так
Код

  ' ,sum(case when to_number(to_char(a1.REVISION, '#39'HH24'#39')) between 8 and 20 then val else 0 end) "с 8 до 20"'+

полный код выглядит так (может кому пригодиться)
выводит параметры за смену и считает с начало смены
Код

str:='select a2.NAME_EN '+
        ',trunc(a1.REVISION) day  '+
        ' ,sum(case when to_number(to_char(a1.REVISION, '#39'HH24'#39')) between 8 and 20 then val else 0 end) "ñ 8 äî 20"'+
        ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'09'#39',val)) "9:00" '+
           ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'10'#39',val)) "10:00"  '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'11'#39',val)) "11:00"  '+
        ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'12'#39',val)) "12:00" '+
         ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'13'#39',val)) "13:00" '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'14'#39',val)) "14:00"  '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'15'#39',val)) "15:00"  '+
        ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'16'#39',val)) "16:00" '+
         ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'17'#39',val)) "17:00" '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'18'#39',val)) "18:00"  '+
         ',sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'19'#39',val)) "19:00"  '+
        ' ,sum(decode(to_char(a1.REVISION,'#39'HH24'#39'),'#39'20'#39',val)) "20:00" '+
  'from  lev3.ARC_TAG a1, lev3.REF_TAG a2 '+
   'where (a1.tag_ID=a2.Tag_ID) and (a1.REVISION BETWEEN TO_DATE('''+data1+''', ''DD/MM/YYYY HH24:MI:SS'') '+
'AND TO_DATE('''+data2+''', ''DD/MM/YYYY HH24:MI:SS'')) '+
   'group by a2.Name_EN,trunc(a1.REVISION)';


Еще раз спасибо 
не знаю как не доглядели ошибку
зато нучились как копировать запрос с TOAD  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.