Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Вниз

выбор столбца для суммирования в SQL   Найти похожие ветки 

 
Васька   (2014-03-12 15:03) [0]

Привет, мастера.
Есть запрос
Select base_an.kod_an,base_an.PL_minus , COUNT(base_an.kod_an) as "Кол-во"  
   from base_an, Diagnost
   where base_an.vid_an=1  
     and base_an.kod_an=Diagnost.Short_name
     and base_an.clinic="гб1"
     group by base_an.kod_an, base_an.PL_minus

В таблице Diagnost есть два поля Price_minus и Price_pl
значение которых зависит от base_an.PL_minus.
Подскажите как сделать в запросе чтобы в столбец попадала сумма соответствующего поля?


 
Ega23 ©   (2014-03-12 15:13) [1]

я не очень понял, что тебе требуется, но вангую, что case:

select
 case some_column
   when some_column_value1 then some_result_value1
   when some_column_value2 then some_result_value2
   when some_column_value3 then some_result_value3
 end  as some_resultset_field


 
Васька   (2014-03-12 15:18) [2]

а как это к моему запросу приделать?
просто добавить в конец?


 
Васька   (2014-03-12 15:26) [3]

а на моих именах столбцов можно?
не понял я что куда продставлять.
Значение base_an.PL_minus ="+" или "-"


 
Труп Васи Доброго ©   (2014-03-12 15:34) [4]


> просто добавить в конец?

Шедеврально!!!
ИМХО ТС сам не совсем понимает что хочет.
Человек, ты для начала сам сядь и на бумаге письменно по русски (без SQL) изложи чего хочешь, там глади и вопрос отпадёт. А так-то миелофнов у нас нет.


 
Ega23 ©   (2014-03-12 15:36) [5]


> а на моих именах столбцов можно?


Можно. Только сначала представь себе, что ты - это я. И попробуй изложить задачу так, чтобы я её понял. А то ведь я не в курсах про твои base_an.kod_an, base_an.PL_minus и прочие Диагносты.


 
Васька   (2014-03-12 16:05) [6]

Все я разобрался с запросом.
но возникла  непонятная проблема, а именно:
запрос работает в MS SQL Server.

а моя программа работает с  Access.
Я перенес  временно в SQL Server для удобства составления запросов на этапе проектирования.

В Delphi делаю этот запрос
qry1.SQL.Add("select base_an.kod_an,base_an.PL_minus,");
 qry1.SQL.Add("COUNT(base_an.kod_an),");
 qry1.SQL.Add("SUM(case when base_an.PL_minus = ""-"" then diagnost.Price_otr");
 qry1.SQL.add("else Diagnost.Price_pl end)");
 qry1.SQL.Add("from base_an, Diagnost");
 qry1.SQL.Add("where base_an.vid_an=1");
 qry1.SQL.Add("and base_an.kod_an=Diagnost.Short_name");
 qry1.SQL.Add("and base_an.clinic=""гб1""");
 qry1.SQL.Add("group by base_an.kod_an, base_an.PL_minus");
 qry1.Active:=True;

Выдает class EOleException with message "Неопознанная ошибка".
подскажите в чем дело?


 
Ega23 ©   (2014-03-12 16:13) [7]

Опять-таки вангую:
qry1.SQL.Text := "select base_an.kod_an,base_an.PL_minus, COUNT(base_an.kod_an), ..... group by base_an.kod_an, base_an.PL_minus";


 
Ega23 ©   (2014-03-12 16:14) [8]

Да, и для COUN и SUM нехило бы названия столбцов рекордсета добавить.
Ну там COUNT(base_an.kod_an) as Cnt, SUM(case ...end) as Summ


 
Труп Васи Доброго ©   (2014-03-13 00:05) [9]


> запрос работает в MS SQL Server.


> а моя программа работает с  Access.


> Выдает class EOleException with message "Неопознанная ошибка".



> PL_minus = ""-""

Мы не в Чикаго, моя дорогая...
Для Access знак - (минус) это подстановочный знак (см. справку) и если ты хочешь искать его, то засунь его в квадратные скобки [-]
Скузи за обшибки, ми зело пьян :)


 
Васька   (2014-03-13 08:26) [10]


> засунь его в квадратные скобки [-]

Все равно не помогает
пробовал и в ковычках (PL_minus="[-]") и без них (PL_minus=[-])


 
Ega23 ©   (2014-03-13 08:55) [11]

А всё потому, что нехрен литералы использовать там, где не надо.

PL_minus=["-"]  а так?


 
Васька   (2014-03-13 09:03) [12]


> PL_minus=["-"]

и так не помогает


 
Ega23 ©   (2014-03-13 09:10) [13]

Ну тогда это к Коле вопрос, он у нас по access специалист, я с ним вообще не работал


 
Васька   (2014-03-13 09:18) [14]

Че за Коля? где его найти?


 
Труп Васи Доброго ©   (2014-03-13 10:05) [15]


> Все равно не помогает

И правильно не помогает. Ты скажешь к конце концов КТО выполняет запрос? Какая программа (СУБД)? Что означают твои слова "моя программа работает с  Access"? Если ты этот запрос пытаешься выполнить в самом ACCESS, то тебя ждёт облом, не знает он никаких кейсов (case) вообще, там всякие IIF, Choose и Switch используются. Case только из VBA работает.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.047 c
15-1415822458
Dennis I. Komarov
2014-11-12 23:00
2015.09.10
маленький http


15-1420407002
Юрий
2015-01-05 00:30
2015.09.10
С днем рождения ! 5 января 2015 понедельник


15-1412618295
Дмитрий Белькевич
2014-10-06 21:58
2015.09.10
Обновление 1 для Delphi XE6


15-1415898451
полвторого
2014-11-13 20:07
2015.09.10
Ega23, а я песню Вам нашёл!


15-1415338310
SKIPtr
2014-11-07 08:31
2015.09.10
Серебряная Калоша2014





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский