Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.09.10;
Скачать: CL | DM;

Вниз

выбор столбца для суммирования в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.062 c
15-1421425875
SergP
2015-01-16 19:31
2015.09.10
Перепаковать архивы 7z в zip


15-1421111607
Кто б сомневался
2015-01-13 04:13
2015.09.10
Какие программы используете для построения блок схем?


15-1416346202
Юрий
2014-11-19 00:30
2015.09.10
С днем рождения ! 19 ноября 2014 среда


4-1272196394
Danger
2010-04-25 15:53
2015.09.10
владелец процесса, ошибка при определении


2-1397547244
kossxsasha
2014-04-15 11:34
2015.09.10
перенос данных из excel в power point