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

Вниз

Запросы   Найти похожие ветки 

 
Клара   (2006-12-08 10:26) [0]

Есть таблица персонала, поля: Dat_R, Age(вычисляется).
Нужно разбить данные по возрастным группам: от20 до 29, от 30 до 39 и т.д и т.п


 
Elen ©   (2006-12-08 10:32) [1]


> Нужно разбить данные по возрастным группам: от20 до 29,
> от 30 до 39 и т.д и т.п

Ну так простой Order by просортирует.


 
Jeer ©   (2006-12-08 10:37) [2]


> Нужно разбить данные


Мы не будем телепатировать - уточните, что значит разбить.


 
Elen ©   (2006-12-08 10:43) [3]


> Клара

Кстати есть в SQL Groub By Having условия AND условия... (если не ошибаюсь ;))


 
Клара   (2006-12-08 10:44) [4]

На этой разбивке нужно построить график возрастных категорий и сортировка я думаю не пожет. Здесь нужно вычислить, сколько человек в возрасте от 20 до 29, сколько от 30 до 39.


 
oxffff ©   (2006-12-08 10:45) [5]

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


 
oxffff ©   (2006-12-08 10:46) [6]

О а я угадал.


 
Клара   (2006-12-08 10:46) [7]


> oxffff

Ну и что?


 
Sergey13 ©   (2006-12-08 10:47) [8]

А СУБД какая?


 
Клара   (2006-12-08 10:48) [9]

БД в Access, а проги в Delphi7


 
oxffff ©   (2006-12-08 10:49) [10]

Specifies a search condition for a group or an aggregate. HAVING can be used only with the SELECT statement. HAVING is typically used in a GROUP BY clause. When GROUP BY is not used, HAVING behaves like a WHERE clause.


 
oxffff ©   (2006-12-08 10:54) [11]

HAVING тебе не поможет

Тебе нужно будет использовать CASE и group by

Что то вроде этого

select id,case age .. as agegroup,sum(agegroup) from person group by id,agegroup


 
Клара   (2006-12-08 10:54) [12]


> oxffff

Вам скучно, Вы так развлекаетесь?


 
Sergey13 ©   (2006-12-08 10:55) [13]

> [9] Клара   (08.12.06 10:48)

Не знаю какие в Аксес есть функции, но надо нечто вроде (псевдокод)
select Int(Age/10) as Age10, count(Age)
from table_name
group by Int(Age/10)


 
Клара   (2006-12-08 10:56) [14]

А Access как воспримет Case?


 
oxffff ©   (2006-12-08 10:57) [15]

Приведи описание таблицы.


 
Клара   (2006-12-08 10:58) [16]


> Sergey13

Я попробую! Спасибо


 
oxffff ©   (2006-12-08 10:59) [17]

О пардон ошибся

select id,case age .. as agegroup,count(agegroup) from person group by id,agegroup

не sum, а count Конечно же


 
Клара   (2006-12-08 11:01) [18]


> oxffff

Pers(tabn,surname,name,data_r,adres,...)


 
Anatoly Podgoretsky ©   (2006-12-08 11:01) [19]

> Клара  (08.12.2006 10:26:00)  [0]

Привести к целому и поделить на 10
По этому значению группировать и вычислять количество


 
Anatoly Podgoretsky ©   (2006-12-08 11:03) [20]

> Клара  (08.12.2006 10:54:12)  [12]

Конечно скучно и почему бы не поразвлекаться, пока не будет задан вопрос?


 
oxffff ©   (2006-12-08 11:05) [21]

Anatoly Podgoretsky ©   (08.12.06 11:01) [19]

Ну или действительно так элегантнее.


 
Клара   (2006-12-08 11:05) [22]


> oxffff

Если честно, мне нравится идея, но ничего похожего я не видела.
А можно расписать CASE


 
Клара   (2006-12-08 11:07) [23]


> Anatoly Podgoretsky

А это я не Вам. Но за совет спасибо.


 
Anatoly Podgoretsky ©   (2006-12-08 11:11) [24]

> Клара  (08.12.2006 11:07:23)  [23]

Ну почему не мне, я тоже не против.
У тебя вопрос плохо поставлен, пришлось много кратно уточнять.
А у меня сегодня телепатор свежий.


 
Клара   (2006-12-08 11:17) [25]


> Anatoly Podgoretsky


О чем речь?


 
oxffff ©   (2006-12-08 11:17) [26]

Если возрастные группы неравномерны ( то есть не "кратны 10"), то CASE

Evaluates a list of conditions and returns one of multiple possible result expressions.

CASE has two formats:

The simple CASE function compares an expression to a set of simple expressions to determine the result.

The searched CASE function evaluates a set of Boolean expressions to determine the result.

Both formats support an optional ELSE argument.

Transact-SQL Syntax Conventions

Syntax

Simple CASE function:
CASE input_expression
    WHEN when_expression THEN result_expression
   [ ...n ]
    [
   ELSE else_result_expression
    ]
END
Searched CASE function:
CASE
    WHEN Boolean_expression THEN result_expression
   [ ...n ]
    [
   ELSE else_result_expression
    ]
END


Arguments
input_expression
Is the expression evaluated when the simple CASE format is used. input_expression is any valid expression.

WHEN when_expression
Is a simple expression to which input_expression is compared when the simple CASE format is used. when_expression is any valid expression. The data types of input_expression and each when_expression must be the same or must be an implicit conversion.

n
Is a placeholder that indicates that multiple WHEN when_expression THEN result_expression clauses, or multiple WHEN Boolean_expression THEN result_expression clauses can be used.

THEN result_expression
Is the expression returned when input_expression equals when_expression evaluates to TRUE, or Boolean_expression evaluates to TRUE. result expression is any valid expression.

ELSE else_result_expression
Is the expression returned if no comparison operation evaluates to TRUE. If this argument is omitted and no comparison operation evaluates to TRUE, CASE returns NULL. else_result_expression is any valid expression. The data types of else_result_expression and any result_expression must be the same or must be an implicit conversion.

WHEN Boolean_expression
Is the Boolean expression evaluated when using the searched CASE format. Boolean_expression is any valid Boolean expression.

Result Types
Returns the highest precedence type from the set of types in result_expressions and the optional else_result_expression. For more information, see Data Type Precedence (Transact-SQL).


 
Клара   (2006-12-08 11:21) [27]


> oxffff

Это что бы мало не показалось. Отстань мол.
Я приму к сведению.


 
oxffff ©   (2006-12-08 11:23) [28]

То есть в твоем случае будет

select case age
        ...
        WHEN age>20 and age<30 THEN 3
        WHEN age>30 and age<40 THEN 4
        ...
        end
        as agegroup,
        count(agegroup) from person group by agegroup

Естественно можно вместо THEN 3 писать THEN "20-29".

Это есть в MS SQL. Что касаемо ACCESS, то не знаю


 
oxffff ©   (2006-12-08 11:24) [29]


> Клара   (08.12.06 11:21) [27]
>
> > oxffff
>
> Это что бы мало не показалось. Отстань мол.
> Я приму к сведению.


НЕ понял тебя?


 
Клара   (2006-12-08 11:25) [30]


> oxffff

Для каких СУБД. И кто автор.


 
Клара   (2006-12-08 11:27) [31]


> oxffff

Я о размере справки.


 
oxffff ©   (2006-12-08 11:28) [32]


> Клара   (08.12.06 11:25) [30]
>
> > oxffff
>
> Для каких СУБД. И кто автор.


Вы говорите загадками.  Опять не понял вас.
Что вы хотите?


 
Клара   (2006-12-08 11:31) [33]


> oxffff

Вы перегрелись, раслабтесь и улыбнитесь.
Ничего обидного. А я пока займусь практикой.


 
Anatoly Podgoretsky ©   (2006-12-08 11:32) [34]

> oxffff  (08.12.2006 11:17:26)  [26]

не "кратны М"),


 
Anatoly Podgoretsky ©   (2006-12-08 11:33) [35]

> oxffff  (08.12.2006 11:23:28)  [28]

Тут есть ошибка в логике, все кратные 10 выпадают, первое отношение должно быть >=


 
oxffff ©   (2006-12-08 11:33) [36]


> Клара   (08.12.06 11:31) [33]
>
> > oxffff
>
> Вы перегрелись, раслабтесь и улыбнитесь.
> Ничего обидного. А я пока займусь практикой.


Вы поняли реализацию на CASE?


 
Клара   (2006-12-08 11:37) [37]

Да я Вас поняла. Мне нужно время, что-бы опробовать и тот и другой варианты.
Результат сообщу.


 
oxffff ©   (2006-12-08 11:38) [38]


> Anatoly Podgoretsky ©   (08.12.06 11:33) [35]
> > oxffff  (08.12.2006 11:23:28)  [28]
>
> Тут есть ошибка в логике, все кратные 10 выпадают, первое
> отношение должно быть >=


Абсолютно с вами согласен.
Я тоже заметил, но уже после того, как запостил.


 
Virgo_Style ©   (2006-12-08 11:39) [39]

oxffff ©   (08.12.06 11:28) [32]
Вы говорите загадками.  Опять не понял вас.
Что вы хотите?


Ты зачем девушку обижаешь, справку цитируешь? %-)
Или
"Ты не умничай, ты рукой махни".

imho.


 
Клара   (2006-12-08 11:40) [40]


> Anatoly Podgoretsky

А разве можно группировать по вычисляемому полю или имеется ввиду псевдоним?


 
oxffff ©   (2006-12-08 11:45) [41]


> Virgo_Style ©   (08.12.06 11:39) [39]
> oxffff ©   (08.12.06 11:28) [32]
> Вы говорите загадками.  Опять не понял вас.
> Что вы хотите?
>
> Ты зачем девушку обижаешь, справку цитируешь? %-)
> Или
> "Ты не умничай, ты рукой махни".
>
> imho.


Распиши доходчиво. Что ты хотел этим сказать.


 
Anatoly Podgoretsky ©   (2006-12-08 11:54) [42]

> Клара  (08.12.2006 11:31:33)  [33]

Так мы давно улыбаемся :-)


 
Anatoly Podgoretsky ©   (2006-12-08 11:54) [43]

> oxffff  (08.12.2006 11:38:38)  [38]

А я тоже только для порядка, поскольку на демонстрацию идеи это не влияет.


 
Anatoly Podgoretsky ©   (2006-12-08 11:56) [44]

> Клара  (08.12.2006 11:40:40)  [40]

Можно, зависит от СУБД, в разных разный синтаксис, но обычно в условии группировки повторяется выражение из выборки, иногда алиасы, иногда номера и очень редко когда нельзя.


 
Anatoly Podgoretsky ©   (2006-12-08 11:56) [45]

> oxffff  (08.12.2006 11:45:41)  [41]

> Что ты хотел этим сказать.

Он хотел Клару обидеть.


 
Клара   (2006-12-08 12:08) [46]


> Anatoly Podgoretsky

Мы победили, столь ненавистный мною проект.
Да прямо в лоб вычисляемое поле группировать нельзя, а вот через номера...


 
Клара   (2006-12-08 12:11) [47]


> oxffff

А ваш вариант я тоже опробую. Не обижайтесь, я еще к вам постучусь.


 
Anatoly Podgoretsky ©   (2006-12-08 12:33) [48]

> Клара  (08.12.2006 12:11:47)  [47]

В дверь.


 
Клара   (2006-12-08 12:44) [49]


> Anatoly Podgoretsky

Это было бы забавно


 
Клара   (2006-12-08 13:02) [50]


> Anatoly Podgoretsky

Тук-тук! Мона?
У меня несколько другой вопрос: как можно изменить подписи в легенде компонента DBChart, на более понятные.


 
Elen ©   (2006-12-08 13:10) [51]


> Клара

Вспомни что я тебе говорила - OnGetLegendText


 
Anatoly Podgoretsky ©   (2006-12-08 13:11) [52]

> Клара  (08.12.2006 13:02:50)  [50]

Не работаю с DBChart


 
Клара   (2006-12-08 13:13) [53]

Я все переделала с ADO глухо.

> OnGetLegendText

Попробую


 
Клара   (2006-12-08 13:14) [54]


> Anatoly Podgoretsky

Слишком мелко?


 
Elen ©   (2006-12-08 13:16) [55]


> Тук-тук!

Вспомнилось тут - "Knock knock knocking on the heaven doors"

> Попробую

Там при отрисовке это событие вызывается сктолоко сколько у тебя подписей. и можеш там саму подпись в виде строки менять, в зависимисти от индекса.


 
Клара   (2006-12-08 13:25) [56]


> Elen

Примерно так
DBChart1.Series[0].Labels:=
и что дальше


 
Elen ©   (2006-12-08 13:33) [57]


> и что дальше

Нет не так.
Вот это прописывать :

procedure TForm1.DBChart1GetLegendText(Sender: TCustomAxisPanel;
 LegendStyle: TLegendStyle; Index: Integer; var LegendText: String);
begin
LegendText :=inttostr(index)+" "+LegendText;
end;


Я что-то не пойму что ты делаеш....


 
Клара   (2006-12-08 13:38) [58]


> Elen

Мне не легенду нужно подписать, а деления в легенде


 
Anatoly Podgoretsky ©   (2006-12-08 13:39) [59]

> Клара  (08.12.2006 13:14:54)  [54]

Не требуется по работе, когда потребуется, то попробую.


 
Elen ©   (2006-12-08 13:40) [60]


>  деления в легенде

А что это такое?


 
Клара   (2006-12-08 13:53) [61]


> Elen

То есть ей можно поменять структуру.
А как значения к этому прибавить, т.е. мне нужно как по умолчанию, но с небольшой корректурой.


 
Elen ©   (2006-12-08 13:56) [62]


> То есть ей можно поменять структуру.

Нихита не пойму.... Кому поменять? Что такое деления в легенде? В легенде есть только текст и маркер цвета.


 
Anatoly Podgoretsky ©   (2006-12-08 14:17) [63]

> Elen  (08.12.2006 13:40:00)  [60]

Подписи оси.


 
Клара   (2006-12-08 14:23) [64]


> Elen

LegendText :=inttostr(1)+"от 30 до 39";
Вот сечас легенда отражает "от 30 до 39" столько, сколько значений в легенде, а мне нужно подписать каждую стр. в легенде.
Например:
"от 20 до 29"
"от 30 до 39"
"от 40 до 49"


 
Elen ©   (2006-12-08 14:32) [65]


>  а мне нужно подписать каждую стр. в легенде.

Ну так там еще передается индекс легенды. Внимательней на заголовок функции смотри


 
Клара   (2006-12-08 14:43) [66]

Вот по этому я о Labels и начинала разговор. Потому чтоБ то что в Labels, то и в легенде, то и на графике. Я скоро взорвусь!
Но все ошибки пригодятся в жизни.


 
Elen ©   (2006-12-08 14:53) [67]


>  Я скоро взорвусь!

Не взрывайся.

Например ты можеш не автоматом строить график, а в цикле проходиш по записям и Chart1.Series[0].AddX(<значение текущей записи>,"Пишу все что хочу");
И это уже будет именно в Лабелях на графике. И это все в купе с предидущими советами.


 
Клара   (2006-12-08 15:09) [68]


> Chart1.Series[0].AddX(<значение текущей записи>,"Пишу все
> что хочу");

Ты не поверишь.
Я именно этим сейчас и занимаюсь.


 
Anatoly Podgoretsky ©   (2006-12-08 15:15) [69]

> Клара  (08.12.2006 14:43:06)  [66]

Это не ошибки, а сложность задачи, к тому же авторы намудрили с терминогогией, а она у деловой графики весьма четкая и специфическая.
Поэтому когда ты говоришь о Labels, то я подразумеваю одно именно метки значений, а оказывается, что под этим идут три разных понятия. Легенда тоже самое.
А есть метки (подписи значений), подписи оси значений и легенда.
Это не добавляет понимания, а только вносит путаницу.


 
Anatoly Podgoretsky ©   (2006-12-08 15:16) [70]

> Клара  (08.12.2006 15:09:08)  [68]

Мы программисты и авторы тоже и мы и они очень далеки от деловой графиги.


 
Elen ©   (2006-12-08 15:21) [71]

Удалено модератором
Примечание: Флудить завязываем


 
Клара   (2006-12-08 15:26) [72]


> кто расскажет нибылицу и я поверю - получит полцарства


Женщинам полцарства дают за поцелуй, а вот программерам за небылицы.


 
Anatoly Podgoretsky ©   (2006-12-08 15:29) [73]

> Elen  (08.12.2006 15:21:11)  [71]

И коня в придачу


 
Elen ©   (2006-12-08 15:30) [74]

Удалено модератором
Примечание: Флудить завязываем


 
Клара   (2006-12-08 15:37) [75]

Какой чудный день!
У всех истерика...


 
Клара   (2006-12-08 15:46) [76]

Аут!
Хочу спать и оторваться на ком нибудь.


 
Anatoly Podgoretsky ©   (2006-12-08 15:51) [77]

> Клара  (08.12.2006 15:46:16)  [76]

> Хочу спать и оторваться на ком нибудь.

Я согласен.


 
Клара   (2006-12-08 15:55) [78]


> Anatoly Podgoretsky

Это будет "больно".
А что не на ком?


 
Anatoly Podgoretsky ©   (2006-12-08 15:58) [79]

> Клара  (08.12.2006 15:55:18)  [78]

А не на ком не устраивает.


 
Elen ©   (2006-12-08 16:07) [80]

Удалено модератором
Примечание: Флудить завязываем


 
MsGuns ©   (2006-12-09 01:46) [81]

Удалено модератором
Примечание: Флудить завязываем


 
Клара   (2006-12-11 14:06) [82]


> Elen


Chart1.Series[0].AddX(<значение текущей записи>,"Пишу все что хочу");
Я все о том же, AddX -это добавление нового значения.
А как поменять в графике подписи значений на более понятные? Например:
 в графике 2, а нужно "от 20 до 29"
 в графике 3, а нужно "от 30 до 39" и т.д.


 
Elen ©   (2006-12-11 14:13) [83]


> Клара

Так сразу вопрос - тип графика? (для точности), кстати Sorry за флуд.
Подписи значений - это те которые над кусками пирога висят наподобие хинтов? (имею виду тип диаграммы Pie)


 
Elen ©   (2006-12-11 14:17) [84]


> А как поменять в графике подписи значений на более понятные?
>  Например:
>  в графике 2, а нужно "от 20 до 29"
>  в графике 3, а нужно "от 30 до 39" и т.д.

Попробую догадаться - есть диаграмма столбцов. Каждый столбец определяет количество людей в возрастной группе. Так? Тогда примерно так :

Chart1.Series[0].AddX(10,"от 20 до 29");
Chart1.Series[1].AddX(30,"30 до 39");
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Chart1.Series[I-тая].AddX(30,"от ГмГм до ГнГн");



 
Клара   (2006-12-11 14:17) [85]

Да  именно!
Вы знаете я нашла замечательный компонент DecisionCube, он изумительно строит графики, но подсоединить к ADOConnection я не могу.


 
Elen ©   (2006-12-11 14:21) [86]


> Вы знаете я нашла замечательный компонент DecisionCube,
> он изумительно строит графики, но подсоединить к ADOConnection
> я не могу.

Его и не надо цеплять к ADOConnection. Связка может быть такой : ADOConnection-ADOQuery-DataSource-DecisionQuery. Должно работать.


 
Клара   (2006-12-11 14:23) [87]


> Chart1.Series[0].AddX(10,"от 20 до 29");
> Chart1.Series[1].AddX(30,"30 до 39");
> ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
> Chart1.Series[I-тая].AddX(30,"от ГмГм до ГнГн");

Данные у меня уже есть, они беруться из запроса и в подписях числовые значения, а мне нужно более наглядно, что людям с улицы было понятно, что есть что.


 
Elen ©   (2006-12-11 14:23) [88]


>  Связка может быть такой : ADOConnection-ADOQuery-DataSource-
> DecisionQuery. Должно работать.

Гм. DataSource можно исключить...


 
Клара   (2006-12-11 14:32) [89]

Вы знаете он вызывает ошибку. Вот с родным компонентом он работает DecisionQuery1, а с Ado нет.


 
Клара   (2006-12-11 14:33) [90]

А DecisionQuery1 работает через алиас.


 
Elen ©   (2006-12-11 14:37) [91]


> Клара

Так. Тогда если в Серии уже есть данные и они начерчены то может поможет код наподобие :

procedure TForm1.Button1Click(Sender: TObject);
var t:TSeriesMarks;tp:TSeriesMarkPosition;
begin
t:=Chart1.Series[0].Marks;
tp:=t.Positions.Position[0];
t.Draw(0,clred,"qwqw",tp);
end;


Здесь вырисовывается марка над столбцом, пирогом, в общем точке значения на диаграмме где 0-номер точки. Это можно в цикле пройти для каждой точки.


 
Elen ©   (2006-12-11 14:42) [92]


> Клара

Чесное слово, может мое мнение и не верное, но как по мне проще пройти в цикле все записи и вручную построить обычный Chart, не связываясь с Decision и подобными примочками. Я тогда хоть могу контролировать что у меня отображается в полной мере.


 
Клара   (2006-12-11 14:55) [93]


> t.Draw(0,clred,"qwqw",tp);

А вот эту строку можно расшифровать, что здесь значит Draw и clred


 
Elen ©   (2006-12-11 14:57) [94]


> Клара

Draw значит рисовать Марку номер 0 красным цветом с надписью qwqw в позиции tp. Небольшой баг - если под этим номером марка еже есть то она не сотрется. Это не лучший выход так делать, но может на идею натолкнет



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

Текущий архив: 2006.12.31;
Скачать: CL | DM;

Наверх




Память: 0.67 MB
Время: 0.043 c
2-1165897576
Монг
2006-12-12 07:26
2006.12.31
Работа с датой.


2-1166002280
031178
2006-12-13 12:31
2006.12.31
Браузер в Delphi


2-1166025831
Pascalman
2006-12-13 19:03
2006.12.31
Подскажите пожалуйста как решить задачу:


15-1165323891
Экспериментатор
2006-12-05 16:04
2006.12.31
Жесткий диск в режиме PIO


2-1165941009
Kostafey
2006-12-12 19:30
2006.12.31
Запись и вызов методов из массива





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский