powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Distinct в CASE
15 сообщений из 15, страница 1 из 1
Distinct в CASE
    #35802143
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой вопрос, есть селект см.ниже, выбирает количество событий за год по месяцам, но нужно, чтобы выборка была не всех событий в месяце, а лишь количество дней с данным событием, т.е. если в дне было 4 события или 40 то считалось как 1 день в котором произошло данной событие.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
count(case when month(date_srok) =  1  then  1  else null end),
count(case when month(date_srok) =  2  then  1  else null end),
count(case when month(date_srok) =  3  then  1  else null end),
count(case when month(date_srok) =  4  then  1  else null end),
count(case when month(date_srok) =  5  then  1  else null end),
count(case when month(date_srok) =  6  then  1  else null end),
count(case when month(date_srok) =  7  then  1  else null end),
count(case when month(date_srok) =  8  then  1  else null end),
count(case when month(date_srok) =  9  then  1  else null end),
count(case when month(date_srok) =  10  then  1  else null end),
count(case when month(date_srok) =  11  then  1  else null end),
count(case when month(date_srok) =  12  then  1  else null end)
FROM table
WHERE event =  45  and year(date_srok) =  2006  

Надо в COUNT учесть distinct day(date_srok), чтобы ответ соответствовал нижнему скрипту

Код: plaintext
1.
2.
select count(distinct day(date_srok))
FROM table
where event =  45  and year(date_srok) =  2006  and month(date_srok) =  1 

Смысл вопроса в том, чтобы результат выводился в одну строку, как в первом скрипте. Заранее благодарен.
...
Рейтинг: 0 / 0
Distinct в CASE
    #35802313
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC пишет:

> Надо в COUNT учесть distinct day(date_srok), чтобы ответ соответствовал
> нижнему скрипту
>
> select count(distinct day(date_srok))
> FROM table
> where event = *45* and year(date_srok) = *2006* and month(date_srok) = *1*

Так так и будет

SELECT
count( DISTINCT case when month(date_srok) = *1* then *1* else null end),
....
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Distinct в CASE
    #35802357
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv пишет,
Так так и будет

SELECT
count( DISTINCT case when month(date_srok) = *1* then *1* else null end)

Нет будет, а будет distinct по месяцу и ответ будет = 1, а нужно по day в месяце.
...
Рейтинг: 0 / 0
Distinct в CASE
    #35802441
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясню более подробно, раз такой ответ прислал MasterZiv .
за 1-й месяц событий 21
1 день 7 событий
2 день 11 событий
3 день 1 событие
4 день 2 события
так нужно чтобы вернуло за 1-й месяц количество дней т.е. 4 , а по первому скрипту возвращает 21, та вот как туда прилепить в COUNT этот distinct day(date_srok), чтобы вернуло 4. Возможна ли данная реализация посредством CASE?
...
Рейтинг: 0 / 0
Distinct в CASE
    #35802739
sPaul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select count(distinct date_srok)
from table
where event = 45 and year(date_srok) = 2006
group by ent, month(date_srok)

в одну строку - list()
...
Рейтинг: 0 / 0
Distinct в CASE
    #35802833
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sPaul, спасибо, что откликнулись, но не то, я просто не правильно пояснил вопрос, в одну строку но каждое значение именовано . Т.е. одна строка на год содержащая поля по месяцам с количеством дней события.
Еще раз спасибо и извиняюсь за плохую постановку вопроса.
...
Рейтинг: 0 / 0
Distinct в CASE
    #35803039
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC пишет:

> Нет будет, а будет distinct по месяцу и ответ будет = 1, а нужно по day
> в месяце.
Я вам про синтаксис говорю, а вот про семантику уж вы сами думайте.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Distinct в CASE
    #35803048
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC пишет:
> Вот такой вопрос, есть селект см.ниже, выбирает количество событий за
> год по месяцам, но нужно, чтобы выборка была не всех событий в месяце, а
> лишь количество дней с данным событием, т.е. если в дне было 4 события

Не люблю писать запросы за других, но раз уж въехал... может вам это надо ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT
   month(date_srok),
   count( distinct  1 ) -- или count(distinct day(date_srok))
FROM table
WHERE event =  45  and year(date_srok) =  2006 
group by month(date_srok)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Distinct в CASE
    #35803347
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv пишет
Я вам про синтаксис говорю, а вот про семантику уж вы сами думайте.

Синтаксис знаю, спасибо за участие, просто я спросил вот почему
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT
count(case when month(date_srok) =  [b]1  then  1  else null end)[/b]
FROM table
WHERE event =  45  and year(date_srok) =  2006  
равен 
select count(*)
FROM table
where event =  45  and year(date_srok) =  2006  and month(date_srok) =  1 
-----------------------------------------------------------------------
а вот как 
select distinct day(date_srok)
FROM table
where event =  45  and year(date_srok) =  2006  and month(date_srok) =  1 
представить в виде
SELECT
count(???? case when month(date_srok) =  [b]1  then  1  else null end)[/b]
FROM table
WHERE event =  45  and year(date_srok) =  2006  
Возможно ли так? Достаточно было бы или Да или Нет.

Еще раз спасибо MasterZiv.
Тему закрыта. Всех участников и читателей благодарю :-))
...
Рейтинг: 0 / 0
Distinct в CASE
    #35803946
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC пишет:

Я что-то запутался. Может вы лучше по-русски напишите, что
у вас за таблицы и что надо получить ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Distinct в CASE
    #35804081
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

select count( * )
FROM table
where event = 45 and year(date_srok) = 2006 and month(date_srok) = 1
равен
SELECT
count( case when month(date_srok) = 1 then 1 else null end ),
FROM table
WHERE event = 45 and year(date_srok) = 2006

так вот, мне нужно не count(*), а count(поле) но в редакции count(case when month(date_srok) = 1 then 1 else null end)
рабочий скрипт есть но выполняется в количестве event до 300 в десять раз дольше чем в реализации с CASE, хочется побыстрее, возможно ли в реализации с CASE.
Еще раз спасибо за помощь.
...
Рейтинг: 0 / 0
Distinct в CASE
    #35804100
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да забыл пояснить, почему такой упертый на данную реализацию.
Таблица заполнения удаленная, клиент заполняет INSERTом (SELECTом). Создатель таблицы изменить что либо не в состоянии.
...
Рейтинг: 0 / 0
Distinct в CASE
    #35804305
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC пишет:


Этот запрос
> select count(***)
> FROM table
> where event = 45 and year(date_srok) = 2006 and month(date_srok) = 1
> равен

лучше этого

> SELECT
> count(*case when month(date_srok) = 1 then 1 else null end*),
> FROM table
> WHERE event = 45 and year(date_srok) = 2006

тем, что он считает записи только ЯНВАРЯ, в отличие от
второго, который считает все месяцы, а "выводит" только один.

Доводя эту идею до абсурда, вы могли бы писать

SELECT
count(case when event = 45 and year(date_srok) = 2006 and month(date_srok) = 1
then 1 else null end),
FROM table

но вот только зачем ?

Ещё раз, лучше напишите словами, что вам надо.
Словами. Иначе я помочь не смогу.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Distinct в CASE
    #35804340
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну хочет человек получить значения по месяцам в 12-ти колонках, но одним запросом.
--
2 maxATC: на сколько я понял задачу, лучшая реализация - 12 подзапросов

либо построить VIEW: select distinct year(date_srok), month(date_srok), day(date_srok), event from table
либо если база поддерживает , можно сделать select from select
...
Рейтинг: 0 / 0
Distinct в CASE
    #35804419
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, самый первый скрипт моей показывает, что нужно по всем месяцам, а то, что пишу про первый месяц это просто, чтобы короче, суть то не меняется, да просто вопрос в не написании скрипта как сделать, а можно ли представить один запрос в другой который содержит CASE.

Dmitry пишет
ну хочет человек получить значения по месяцам в 12-ти колонках, но одним запросом.
Совершенно правильный подход.
--
2 maxATC: на сколько я понял задачу, лучшая реализация - 12 подзапросов
именно так и сделано первоначально.


Еще раз спасибо Всем.
Тема закрыта . Благодарю MasterZiv,Dmitry.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Distinct в CASE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]