(Untitled)

Sep 28, 2006 11:13


Здравствуйте…

Мне надо выяснить единственное ли вхождение некоторой записи (т.е. равно ли count(*)  единице по этой записи) в некоторой выборке…

Я пишу:

if 1= (select count(*) from a inner join b on a.id=b.id

where a_id=@id and

(year(reg_date)

group by year(reg_date), month(reg_date))

он пишет ошибку:

Server: Msg 512, Level 16, ( Read more... )

Leave a comment

Comments 20

(The comment has been removed)

misskio September 28 2006, 07:42:10 UTC
:( что ж такое...

до этого был такой вид:
и все работало правильно...
разница лишь в том, что параметр @enddate типа datetime заменен на два параметра типа varchar для обозначения года и месяца отдельно...
почему не работает то же самое, но с извлечением года и месяца из datetime

if 1= (select count(*) from a inner join b on a.extract_id=b.id
where a.claim_id=@id
and (year(reg_date)’<’cast(@year as int) or (year(reg_date)=cast(@year as int) and month(reg_date)
‘<’=cast(@month as int)))
group by year(reg_date), month(reg_date))

Reply


nurpu September 28 2006, 07:26:58 UTC
Запустите подзапрос отдельно и посмотрите, что он возвращает.

Reply

+1 braindancer September 28 2006, 08:19:00 UTC
Непонятно, к чему гадать на кофейной гуще, если можно просто посмотреть вывод подзапроса.

Reply

Re: +1 misskio September 28 2006, 08:20:48 UTC
запустила... поняла, что надо спать по ночам :(

Reply


beskov September 28 2006, 07:37:41 UTC
Вы делаете GROUP BY, а это значит, что вы считаете количество "вхождений" не для всей таблицы/запроса, а для каждой группы - следовательно получаете список.

Reply

misskio September 28 2006, 07:40:55 UTC
:( что ж такое...

до этого был такой вид:
и все работало правильно...
разница лишь в том, что параметр @enddate типа datetime заменен на два параметра типа varchar для обозначения года и месяца отдельно...
почему не работает то же самое, но с извлечением года и месяца из datetime

if 1= (select count(*) from a inner join b on a.extract_id=b.id
where a.claim_id=@id
and (year(reg_date)’<’cast(@year as int) or (year(reg_date)=cast(@year as int) and month(reg_date)
‘<’=cast(@month as int)))
group by year(reg_date), month(reg_date))

Reply

beskov September 28 2006, 07:50:28 UTC
Извините, но у меня такое впечатление, что вы пытаетесь править код, не понимая, что он, и главное, зачем делает.

Я не умею решать задачи на уровне "А и Б сидели на трубе. Сколько лет водителю автобуса?"

Если вы сформулируете бизнес-задачу, опишете имеющиеся структуры данных и версию СУБД, то я напишу вам запрос.

Reply

misskio September 28 2006, 08:19:14 UTC
MS SQL SERVER 2000

может, я действительно не понимаю что он делает...
@id - это знаечние из курсора
данная строчке пишется в цикле курсора...

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

мне надо вынуть записи по заданному полю id, которые вообще встречаются один раз... никогда их не было
записи выбираю из таблиц
tp_extract2claim и
ts_reg_report
соединенных следующим образом: tp_extract2claim.extract_id=ts_reg_report.id

в условиях должно быть:
1. tp_extract2claim.claim_id=@id
2. поле reg_date - дата вхождения записи
@enddate - параметр ханимой процедуры, дата типа datetime
надо учесть все даты, идущие ранее @enddate

суммирование должно быть для каждого месяца

Reply


mike_gmv September 28 2006, 07:40:12 UTC
У тебя несколько строк из-за этого:
group by year(reg_date), month(reg_date))
в частности month(reg_date))

Reply

misskio September 28 2006, 07:43:15 UTC
до этого был такой вид:
и все работало правильно...
разница лишь в том, что параметр @enddate типа datetime заменен на два параметра типа varchar для обозначения года и месяца отдельно...
почему не работает то же самое, но с извлечением года и месяца из datetime

if 1= (select count(*) from a inner join b on a.extract_id=b.id
where a.claim_id=@id
and (year(reg_date)’<’cast(@year as int) or (year(reg_date)=cast(@year as int) and month(reg_date)
‘<’=cast(@month as int)))
group by year(reg_date), month(reg_date))

Reply


misskio September 28 2006, 08:20:16 UTC
ничего себе я торможу :(((((((((((((
у меня в предыдущем отчете был только один месяц, а здесь все...
и я еще спрашиваю, а что это у меня :((((((((

Reply


Leave a comment

Up