Форум: "Базы";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
ВнизМожно ли обойтись 1 запросом? Найти похожие ветки
← →
nejest (2004-02-10 16:24) [0]Нужно сделать отчёт в котором выводится число людей с различным стажем, например:
Менее 1 года- 5
от 1 до 3- 2
от 3 до 5- 10
от 5 до 10- 3
.......
более 25 лет- 5
Можно ли обойтись 1 запросом или для каждой строчки придётся делать отдельный отчёт? Мне не очень хочется писать 8 практически одинаковых запросов.
← →
Семен Сорокин (2004-02-10 16:28) [1]запускай следующий (один) запрос с необходимыми параметрами.
select count(*) from table where стаж between :y1 and :y2
или я чего-то недопонял?
← →
stas (2004-02-10 16:30) [2]Select
POLE1:=sum(CASE when STAGE>1 and STAGE<3 then 1 else 0),
POLE2:=sum(CASE when STAGE>3 and STAGE<5 then 1 else 0),
....
← →
Stas (2004-02-10 16:32) [3]Ну, только знаки может поставить >= и <=
Соответственно.
← →
Stas (2004-02-10 16:33) [4]Короче вот так.
Select
POLE1=sum(CASE when STAGE=>1 and STAGE<=3 then 1 else 0),
POLE2=sum(CASE when STAGE=>3 and STAGE<=5 then 1 else 0),
....
← →
Sandman25 (2004-02-10 16:38) [5]
select a.stage, count(*)
from
(select t.id, min(a.stage),
from
(select 1 stage
union select 3
union select 5
union select 10
union select 25
union select 1000
) a,
table t
where a.stage > t.stage
group by t.id
) q
group by a.stage
← →
Sandman25 (2004-02-10 16:40) [6]Алиасы спутал
select b.stage, count(*)
from
(select t.id, min(b.stage) stage,
from
(select 1 stage
union select 3
union select 5
union select 10
union select 25
union select 1000
) a,
table t
where a.stage > t.stage
group by t.id
) b
group by b.stage
← →
nejest (2004-02-10 17:07) [7]У меня ещё 1 вопрос: Я передаю в запрос дату на которую формируется запрос, как мне от этой даты отнять определённое число лет?
← →
Семен Сорокин (2004-02-10 17:13) [8]nejest (10.02.04 17:07) [7]
У меня ещё 1 вопрос: Я передаю в запрос дату на которую формируется запрос, как мне от этой даты отнять определённое число лет?
DATEADD(yyyy, -MyDiff, MyDate)
-MyDiff - значение сколько отнять
MyDate - дата
← →
Sandman25 (2004-02-10 17:20) [9][7] nejest (10.02.04 17:07)
Если есть MSDN, посмотрите его. T-SQL достаточно хорошо в нем описывается.
← →
nejest (2004-02-10 17:26) [10]2 Семен Сорокин
попробовал и что-то не получается
DATEADD(yyyy,-1,=:p1)
как должно быть правильно? p1 это параметр с датой
← →
Sandman25 (2004-02-10 17:34) [11]= уберите.
И, кстати, если параметр, то вычитать год лучше еще на клиенте, до присвоения параметра. И никакого dateadd не понадобится.
← →
Семен Сорокин (2004-02-10 17:35) [12]nejest (10.02.04 17:26) [10]
= убери.
примеров много в Books online (ставится вместе с MSSQL) и в MSDN.
← →
nejest (2004-02-10 17:50) [13]2 Sandman25
>И, кстати, если параметр, то вычитать год лучше еще на клиенте, >до присвоения параметра. И никакого dateadd не понадобится.
И передавать 8 параметров? ИМХО лучше передавать 1 и пользоватся dateadd.
← →
Sandman25 (2004-02-10 17:54) [14][13] nejest (10.02.04 17:50)
ИМХО лучше смотреть на разницу между параметром и датой.
CASE (GetDate()-StartOfWork) div 365
WHEN 0 "до года"
WHEN 1,2 "от года до трех"
...
END
Только не уверен насчет синтаксиса, я не спец по MS SQL.
← →
nejest (2004-02-11 16:48) [15]select COUNT(*) from pWorker pw, pWorkerAdd pwAdd where pw. id=pwAdd.WorkerId and pwAdd.SeniorityBr>DATEADD(yyyy,-1,:p1) union select COUNT(*) from pWorker pw, pWorkerAdd pwAdd where (pw.id=pwAdd.WorkerId and pwAdd.SeniorityBr<=DATEADD(yyyy,-1,:p1)) and pwAdd.SeniorityBr>DATEADD(yyyy,-3,:p1);
работает только первая часть запроса, не могу понять в чём ошибка
← →
Sandman25 (2004-02-11 16:51) [16]Присвоение параметров идет 1 раз через ParamByName?
Надо 3 раза, и через Params[номер]
← →
nejest (2004-02-11 16:55) [17]и заводить параметры p2,p3?
← →
Sandman25 (2004-02-11 16:59) [18][17] nejest (11.02.04 16:55)
Если хотите использовать ParamByName, то имена параметров должны различаться.
Если Params[номер], то имена могут быть одинаковыми.
В любом случае присваивать нужно все параметры (сколько двоеточий, столько и параметров).
← →
nejest (2004-02-11 17:06) [19]вот как идёт:
form1.ADODataSet1.Parameters[0].Value:=Form1.MonthCalendar1.Date;
т.е. нужно добавить
form1.ADODataSet1.Parameters[1].Value:=Form1.MonthCalendar1.Date;
form1.ADODataSet1.Parameters[1].Value:=Form1.MonthCalendar1.Date;
и в запросе добавить p2 и p3?
← →
Sandman25 (2004-02-11 17:12) [20][19] nejest (11.02.04 17:06)
Неужели Вам легче спросить, чем попробовать? :)
← →
nejest (2004-02-11 17:28) [21]а как нибудь передать его 1 раз и использовать нельзя?
← →
Sandman25 (2004-02-11 17:33) [22]Можно. Если это параметр хранимой процедуры, в которой этот параметр используется 3 раза в одном select.
Хотя, возможно, для MS SQL можно и без ХП. Через @p. Но тут уж я не помощник.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.013 c