Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

SQL- запрос ?   Найти похожие ветки 

 
fedor   (2004-09-08 10:53) [0]

Дано следующее:

sum_debet   sum_kredit  doc_osn_no  zachis_data  
---------  -----------  ----------  ------------
NULL        128.45         1        2004-08-02
NULL        192.67         1        2004-08-02
810.0       NULL           2        2004-08-11
NULL        810.0          2        2004-08-11
200.0       NULL           3        2004-08-11
NULL        200.0          3        2004-08-11
222.4       NULL           14       2004-08-19


Нужно получить 3 запроса:
1)все кредиты, не имеющие "пары" с дебетом

sum_debet   sum_kredit  doc_osn_no  zachis_data  
---------  -----------  ----------  ------------
NULL        128.45         1        2004-08-02
NULL        192.67         2        2004-08-02

2)все дебеты, не имеющие "пары" с кредитом

sum_debet   sum_kredit  doc_osn_no  zachis_data  
---------  -----------  ----------  ------------
222.4       NULL           14       2004-08-19

3)все "пары" кредиты-дебеты (doc_osn_no и zachis_data должны быть при этом равны)

sum_debet   sum_kredit  doc_osn_no  zachis_data  
---------  -----------  ----------  ------------
810.0       NULL           2        2004-08-11
NULL        810.0          2        2004-08-11
200.0       NULL           3        2004-08-11
NULL        200.0          3        2004-08-11

Какие запросы необходимы?


 
fedor   (2004-09-08 11:04) [1]

вообще возможно ли это сделать с помощью запросов?


 
sniknik ©   (2004-09-08 11:13) [2]

> вообще возможно ли это сделать с помощью запросов?
естественно

нужно условие
(sum_debet IS NULL) AND (sum_kredit IS NOT NULL)
и его "вариации"


 
fedor   (2004-09-08 11:21) [3]

2sniknik ©   (08.09.04 11:13) [2]

(sum_debet IS NULL) AND (sum_kredit IS NOT NULL)

вообще-то что это дает?
ведь можно просто (sum_debet IS NULL), остальная часть подразумевается. И наоборот.Либо дебет, либо кредит.


 
sniknik ©   (2004-09-08 11:32) [4]

> вообще-то что это дает?
вариант (возможно не сильно оптимизировано но..) получаем (должны) то что в первом условии описано (остальное думаю по аналогии можно)

SELECT * FROM Deb
WHERE doc_osn_no IN
(
SELECT doc_osn_no FROM
(
SELECT doc_osn_no, count(*)  AS Col FROM Deb
WHERE (sum_debet IS NULL) AND (sum_kredit IS NOT NULL)
GROUP BY doc_osn_no
) AS A
WHERE (Col =2)
)


 
sniknik ©   (2004-09-08 11:40) [5]

чччерт..., все отменяется! я прочитал в заголовке MySQL как MSSQL, т.е. не отменяется но с большой вероятностью приведенный запрос будет для него "корявым".


 
fedor   (2004-09-08 11:41) [6]

2sniknik ©   (08.09.04 11:32) [4]
показывает пусто


 
fedor   (2004-09-08 11:45) [7]

sniknik ©   (08.09.04 11:40) [5]

чччерт..., все отменяется! я прочитал в заголовке MySQL как MSSQL, т.е. не отменяется но с большой вероятностью приведенный запрос будет для него "корявым".

черт должен сказать я, это я спутал - у меня  MSSQL
извини уж


 
fedor   (2004-09-08 11:47) [8]

все равно пусто


 
sniknik ©   (2004-09-08 11:58) [9]

> 2sniknik ©   (08.09.04 11:32) [4]
> показывает пусто
замечательно. раз чтото показывает значит написал правильно ;о)), хотя бы синтаксис, а логика должна быть правильной.  
проверь вложенные по отдельности

SELECT doc_osn_no, count(*)  AS Col FROM Deb
WHERE (sum_debet IS NULL) AND (sum_kredit IS NOT NULL)
GROUP BY doc_osn_no

так есть чтонибудь? должен быть список из doc_osn_no и количества их повторений (пары), для заданного условия
> все кредиты, не имеющие "пары" с дебетом
т.е. в дебете ничего а кредите цыфра. так?

SELECT doc_osn_no FROM
(
SELECT doc_osn_no, count(*)  AS Col FROM Deb
WHERE (sum_debet IS NULL) AND (sum_kredit IS NOT NULL)
GROUP BY doc_osn_no
) AS A
WHERE (Col = 2)


так? здесь отсекаем эти самые пары. выдает чтонибудь?

а в верхнем показываем то что нашли (условие по doc_osn_no), все логично, если нет ничего то значит данных нет или в условии чтото напутано


 
fedor   (2004-09-08 12:11) [10]

> все кредиты, не имеющие "пары" с дебетом
т.е. в дебете ничего а кредите цыфра. так?
не так. если в дебете ничего, то в кредите цифра в любом случае
и наоборот.

вот пара:
sum_debet   sum_kredit  doc_osn_no  zachis_data  
---------  -----------  ----------  ------------
810.0       NULL           2        2004-08-11
NULL        810.0          2        2004-08-11
т.е. в дебет 1 строки = кредиту 2-й строки
doc_osn_no и  zachis_data - одинаковые


 
sniknik ©   (2004-09-08 12:48) [11]

запрос в [9] для первого варианта,
> Нужно получить 3 запроса:
> 1)все кредиты, не имеющие "пары" с дебетом

> sum_debet   sum_kredit  doc_osn_no  zachis_data  
> ---------  -----------  ----------  ------------
> NULL        128.45         1        2004-08-02
> NULL        192.67         1        2004-08-02


вот это он и выдаст, если есть такое (и если NULL есть NULL)

все остальное сам


 
сергей1   (2004-09-08 18:40) [12]

если правильно понимаю, нужны все строки sum_debet, в которых значения не совпадают ни с одним из значений в столбце sum_kredit ? и наоборот ?

1.
select * from Table1 where sum_kredit not in (select sum_debet from Table1) and sum_kredit is not null

2.
select * from Table1 where sum_debet not in (select sum_kredit from Table1) and sum_debet is not null

3.
select * from Table1 where sum_kredit in (select sum_debet from Table1) and sum_kredit is not null
union
select * from Table1 where sum_debet in (select sum_kredit from Table1) and sum_debet is not null


 
sniknik ©   (2004-09-09 08:50) [13]

сергей1   (08.09.04 18:40) [12]
а про пары забыл. там же именно пары "главное". а у тебя они "перекрестятся".
или я все неправильно понимаю... ;о))

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


 
сергей1   (2004-09-09 09:26) [14]

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


 
sniknik ©   (2004-09-09 10:04) [15]

> я в бухгалтерии плохо понимаю
тоже не особо старался понять.

> а что тогда такое пара ?
ну как понял, по doc_osn_no у него парное все (в начальных данных смотри) т.е. там есть 3 пары значения (1,2,3) и одна непарная запись (14).

> но вроде мой запрос выводит то, что в топике указано.
да вроде нет, давай первый разберем
должен вывести
sum_debet   sum_kredit  doc_osn_no  zachis_data  
---------  -----------  ----------  ------------
NULL        128.45         1        2004-08-02
NULL        192.67         1        2004-08-02
так
у тебя запрос
select * from Table1 where sum_kredit not in (select sum_debet from Table1) and sum_kredit is not null
можно упростить (ну sum_kredit если участвует в выборке то он уже не null)
т.е. то же самое
select * from Table1 where sum_kredit not in (select sum_debet from Table1)
в оставшемся условии проверяется, что sum_kredit не входит в в выборку из sum_debet так? проверяем, первый столбец на невхождение во второй столбец

  sum_debet   sum_kredit
  ---------  -----------
1 NULL        128.45 - входит и плюс к этому NULL не участвует в сравнениях/операциях - исключается
2 NULL        192.67 - NULL - исключается
3 810.0       NULL   - входит (= с кредитом в 3 строке)
4 NULL        810.0  - NULL - исключается
5 200.0       NULL   - входит (= с кредитом в 6 строке)
6 NULL        200.0  - NULL - исключается
7 222.4       NULL   - вроде бы и не входит, но теперь с другой стороны NULL, а NULL in (NULL, ...) тоже не работает (вообще NULL<>NULL)

т.е. в результате пустая выборка...
или у тебя там не NULL или ты меня обманываеш, что запрос чтото возвращает, тем более пару... (вот если туда нули подставить к примеру то ситуация резко изменится...)


 
сергей1   (2004-09-09 10:37) [16]

подожди-ка,

>проверяем, первый столбец на невхождение во второй столбец
запрос-то тогда другой :
select * from Table1 where sum_debet not in (select sum_kredit from Table1) and sum_debet is not null

is not null я поставил, т.к. null не будет равен ни одному значению в другом столбце по определению, а значит попадет в выборку

далее как у тебя :

1 - null - не попадает
2 - null - аналогично
3 - 810 - входит, значит исключаем
4 - null
5 - 200 - входит, значит исключаем
6 - null
7 - 222 - не входит, попадает в выборку

итого в итоговом сете - 222, что и требовалось доказать


 
сергей1   (2004-09-09 10:38) [17]

подожди-ка,

>проверяем, первый столбец на невхождение во второй столбец
запрос-то тогда другой :
select * from Table1 where sum_debet not in (select sum_kredit from Table1) and sum_debet is not null

is not null я поставил, т.к. null не будет равен ни одному значению в другом столбце по определению, а значит попадет в выборку

далее как у тебя :

1 - null - не попадает
2 - null - аналогично
3 - 810 - входит, значит исключаем
4 - null
5 - 200 - входит, значит исключаем
6 - null
7 - 222 - не входит, попадает в выборку

итого в итоговом сете - 222, что и требовалось доказать


 
сергей1   (2004-09-09 10:38) [18]

подожди-ка,

>проверяем, первый столбец на невхождение во второй столбец
запрос-то тогда другой :
select * from Table1 where sum_debet not in (select sum_kredit from Table1) and sum_debet is not null

is not null я поставил, т.к. null не будет равен ни одному значению в другом столбце по определению, а значит попадет в выборку

далее как у тебя :

1 - null - не попадает
2 - null - аналогично
3 - 810 - входит, значит исключаем
4 - null
5 - 200 - входит, значит исключаем
6 - null
7 - 222 - не входит, попадает в выборку

итого в итоговом сете - 222, что и требовалось доказать


 
сергей1   (2004-09-09 10:49) [19]

не эксплорер, а полное гавно !
или с сайтом что-то не то...


 
fedor   (2004-09-09 11:21) [20]

все ваши выборки дают пусто


 
sniknik ©   (2004-09-09 11:31) [21]

> итого в итоговом сете - 222, что и требовалось доказать
ну во первых не пара, а во вторых не попадет
с другойто стороны условие смотри
select * from Table1 where sum_kredit(=Null этом случае) not in (select sum_debet(= 222 единственное не попадающее значение на что можно делать проверку) from Table1)
как оно сработает если sum_kredit Null? он с любой стороны не сработает, а получается (если подставить) "если Null not in (222)" (да оно что non in что in false даст).
а вообще проверь.
только предварительно запрос
select * from Table1 where (sum_debet is Null) or (sum_kredit is Null)
и посмотри все записи? по идее должно все выдавать т.к. в исходной таблице чтото да Null.


 
sniknik ©   (2004-09-09 11:33) [22]

fedor   (09.09.04 11:21) [20]
> все ваши выборки дают пусто
условие-начальные данные неверны. мой запрос обязан выдавать 2 показаных записи. (уверен т.к. уже давно проверил)


 
fedor   (2004-09-09 12:07) [23]

может, не совсем понятно объяснил задачу, объясню поподробнее:
дело в том, что проанализировав все ваши запросы, я понял, что они работают только в случае мною заданного примера.
так вот.
в реале мне нужна выборка № 2(где пары), остальное получить
несложно:
вот что дано (например):

id  sum_debet   sum_kredit  doc_osn_no  zachis_data  
--- ---------  -----------  ----------  ------------
1    NULL        128.45         1        2004-08-02
2    NULL        192.67         1        2004-08-02
3    810.0       NULL           2        2004-08-11
4    NULL        810.0          2        2004-08-11
5    200.0       NULL           3        2004-08-11
6    NULL        200.0          3        2004-08-11
7    222.4       NULL           14       2004-08-19

если из всей таблицы убрать эти пары, то выборка №1 - это все
кредиты, а выборка №3- дебеты соответственно.
объясню, условия отбора этих пар:
1.у пары doc_osn_no и zachis_data должны быть идентичны
2.sum_debet у одной записи пары = sum_kredit у другой записи этой пары
повторюсь: sum_debet и  sum_kredit взаимоислючаемы во всей таблице
(т.е. если sum_debet не null , то sum_kredit null и наоборот)
ЗЫ
2sniknik ©   (09.09.04 10:04) [15]
>> я в бухгалтерии плохо понимаю
>тоже не особо старался понять.
а мне приходится, как видите


 
сергей1   (2004-09-09 12:11) [24]

так, действительно, пусто, значит делаем так :

select * from Table1 where isnull(sum_debet,"0") not in (select isnull(sum_kredit,"0") from Table1)
select * from Table1 where isnull(sum_kredit,"0") not in (select isnull(sum_debet,"0") from Table1)

проверил - работает


 
fedor   (2004-09-09 12:16) [25]

2сергей1   (09.09.04 12:11) [24]

как же получить 2 выборку?


 
fedor   (2004-09-09 12:28) [26]

насчет 1 и 3 выборки ты прав, спасибо
как же получить 2?
может как-то исключить из всей таблицы выборки 1 и 3 (тоже выход)
забыл как это делается, а может такое невозможно?


 
сергей1   (2004-09-09 12:32) [27]

2 sniknik

слушай, ну ты же опять запрос перепутал -

>с другойто стороны условие смотри
select * from Table1 where sum_kredit(=Null этом случае) not in (select sum_debet(= 222 единственное не попадающее

запрос, возвращающий число 222 следующий :

select * from Table1 where sum_debet not in (select sum_kredit from Table1)

только там isnull() вставить надо. кстати непонятно почему без него неработает, что-там такое хитрое в этих null

2 fedor
это 1 и 2 выборка. третья должна быть такой -

select * from Table1 where isnull(sum_kredit,"0") in (select isnull(sum_debet,"0") from Table1)
union
select * from Table1 where isnull(sum_debet,"0") in (select isnull(sum_kredit,"0") from Table1)

но не проверил насколько правильный результат, времени нет, проверь сам


 
fedor   (2004-09-09 13:39) [28]

вроде как работает следующее:

select * from sums where sum_kredit in (select isnull(sum_debet,"0") from sums)
union
select * from sums where sum_debet in (select isnull(sum_kredit,"0") from sums)

ан нет!
для данного примера да, все ок!
но в общем случае нет
т.к. проверяются только суммы
но у пары doc_osn_no и zachis_data должны быть идентичны!!!
а если дано например:

id  sum_debet   sum_kredit  doc_osn_no  zachis_data  
--- ---------  -----------  ----------  ------------
1    NULL        128.45         1        2004-08-02
2    NULL        192.67         1        2004-08-02
3    810.0       NULL           2        2004-08-11
4    NULL        810.0          2        2004-08-11
5    200.0       NULL           3        2004-08-11
6    NULL        200.0          3        2004-08-11
7    222.4       NULL           14       2004-08-19
8    NULL        200.0          5        2004-08-11

то выводится:

id  sum_debet   sum_kredit  doc_osn_no  zachis_data  
--- ---------  -----------  ----------  ------------
3    810.0       NULL           2        2004-08-11
4    NULL        810.0          2        2004-08-11
5    200.0       NULL           3        2004-08-11
6    NULL        200.0          3        2004-08-11
8    NULL        200.0          5        2004-08-11

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


 
fedor   (2004-09-09 13:42) [29]

нужны именно пары!(т.е. кол-во = 2!!!)


 
сергей1   (2004-09-09 14:07) [30]

послушай, а если получится вот такое :

5    200.0       NULL           3        2004-08-11
6    NULL        200.0          3        2004-08-11
8    NULL        200.0          5        2004-08-11
9    200.0       null           5        2004-08-11

то как ты определяешь, какая пара нужна ?

по-видимому курсоры тут нужны, но вообще сразу незнаю, подумать надо


 
fedor   (2004-09-09 14:25) [31]

>то как ты определяешь, какая пара нужна ?
нужны все пары


 
sniknik ©   (2004-09-09 14:26) [32]

fedor   (09.09.04 13:42) [29]
> нужны именно пары!(т.е. кол-во = 2!!!)
ну а про что запрос в во втором моем посте? и дальше про то же твердил.
если хочеш продолжить, вернись к началу и как минимум ответь на то о чем я спрашивал.
а то что после стали обсуждать (с [12])  это частный случай только для приведенных данных без "добавок".

сергей1   (09.09.04 14:07) [30]
> послушай, а если получится вот такое : ...
тоже говорил ([13]) нехорошо суммы в условиях. ну ладно хоть счас дошло.
сергей1   (09.09.04 12:32) [27]

> 2 sniknik
> слушай, ну ты же опять запрос перепутал -
...
> только там isnull()
тоже поздновато
> [15] (вот если туда нули подставить к примеру то ситуация резко изменится...)

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

> по-видимому курсоры тут нужны, но вообще сразу незнаю, подумать надо
не нужны, все три варианта это вариации в условии моего первого запроса.


 
сергей1   (2004-09-09 16:41) [33]

2 sniknik
к чему такой напряг ? как будь-то тебя премии лишат, если Федор твим вариантом не воспользуется.

>тоже говорил ([13]) нехорошо суммы в условиях. ну ладно хоть счас дошло.
Крисстально ясная формулировка идеи !

ты выложи раб. вариант, может и лучше моего будеть, кто спорит-то ?

вот мой рабочий

select * into #t from sums where sum_kredit in (select isnull(sum_debet,"0") from sums)
union
select * from sums where sum_debet in (select isnull(sum_kredit,"0") from sums)

select sum_debet as f1, sum_kredit as f2, doc_osn_no as f3, zachis_data as f4 into #t1 from #t

select * into #t2 from #t t1
inner join #t1 t2
on
t1.sum_debet=t2.f2 and t1.doc_osn_no=t2.f3 and t1.zachis_data=t2.f4

select sum_debet, sum_kredit, doc_osn_no, zachis_data from #t2
union
select f1,f2,f3,f4 from #t2

drop table #t
drop table #t1
drop table #t2

проверил, вроде все правильно


 
sniknik ©   (2004-09-09 17:35) [34]

> к чему такой напряг ? как будь-то тебя премии лишат, если Федор твим вариантом не воспользуется.
...
> ты выложи раб. вариант, может и лучше моего будеть, кто спорит-то ?
мне то как раз пофигу, и я выложил - рабочий (!) - по тем условиям что здесь были даны.
если не хочет пусть не пользуется я же не настаиваю (ну особо сильно :). и пока не ответит (не будет диалога) я пальцем об палец не ударю, мне это влом. и делать за него другие запросы не буду если первого не поймет (а поймет, 2 оставшихся сделает легко).
и дальше обсуждать тоже не буду (повтор), если ктонибудь не докажет (что уже понимание) в чем я неправ, хотя бы описанием своих действий (даже не понимая), чтобы мне понять почему рабочее у меня не идет у него (хотя я и догадываюсь (если в начле топика 0 и Null у вас было одним и тем же ;))
> показывает пусто
...
> все равно пусто
это отмазки а не деятельность в решении своей же проблемы.

> [33]
где отбор по парам? и опять по сумам выборки, а если они совпадают в разных парах? даже проверять не буду, нерабочий код.
> проверил, вроде все правильно
просто подогнано под именно эти данные.

> ты выложи раб. вариант, может и лучше моего будеть, кто спорит-то ?
извини но это уже похоже на развод "лоха" на "слабо", подозреваю что в 33 fedor под ником сергей1 выступает чтобы получить готовый код.
раз я отказался делать "под ключь", так таким образом выманить, не, пусть ктонибудь другой это сделает. (спецов сдесь хватает)

> fedor ака сергей1
если всетаки наконецто решиш проверить > [4], потрудись соблюсти условия написанные в [0].
а также проверь [9] и результаты предварительного запроса из [21].
результаты донести максимально внятно...

а без этого мы просто треплемся, а это то ради чего я сюда и захожу ;о), и продолжу с удовольствием (без кода ;).


 
сергей1(федор)   (2004-09-09 18:40) [35]

2 sniknik
ты разгадал мою подлую двуличность.

раб. код где, в [4] ?
только-что проверил, сет не пустой но неверный

2 fedor
погонял - работает, если я правильно понял задачу, все ок


 
сергей1(федор)   (2004-09-09 18:43) [36]

P.S.
это код целиком для третьей выборки, остальные два то вроде работали


 
сергей1   (2004-09-10 19:22) [37]

ну вот, fedor изчез, и даже не поблагодарил никого, а может это в самом деле я был ? эх, раздвоение личности вешь плохая

между тем, вот немного более усовершенствованный вариант

select * into #t from sums where sum_kredit in (select isnull(sum_debet,"0") from sums)
union
select * from sums where sum_debet in (select isnull(sum_kredit,"0") from sums)

select  t1.sum_debet, t1.sum_kredit, t1.doc_osn_no, t1.zachis_data, t2.sum_debet as f1, t2.sum_kredit as f2, t2.doc_osn_no as f3, t2.zachis_data  as f4 into #t1 from #t t1
inner join #t t2
on
t1.sum_debet=t2.sum_kredit and t1.doc_osn_no=t2.doc_osn_no and t1.zachis_data=t2.zachis_data

select sum_debet, sum_kredit, doc_osn_no, zachis_data from #t1
union
select f1,f2,f3,f4 from #t1

drop table #t
drop table #t1

100% рабочий вариант, не раз проверенный


 
sniknik ©   (2004-09-10 20:48) [38]

> 100% рабочий вариант, не раз проверенный
а ноль не цифра? или думаеш нет документов с нулевой суммой?
(рекламные акции к примеру так оформляются, накладные "подарки" от фирмы, да мало ли еще)

подставь новые данные с нулем, что будет с твоей сто процентностью? ;)
говорю же (уже не раз) у тебя просто "подгонка" под показаные данные, а их может быть много и не только эти... логика должна быть универсальной и под "четкие" признаки а не по плавающим данным.


 
сергей1   (2004-09-11 09:52) [39]

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

итак, в скотобазе имеем таблицу sums следующего вида :

sum_debet     sum_kredit    doc_osn_no    zachis_data
______________________________________________________
200           null          4             4
222           null          3             3
55            null          7             7
null          55            7             7
43            null          6             5
null          200           4             4
null          43            6             5
_______________________________________________________

запускаем этот код:

select * into #t from sums where sum_kredit in (select isnull(sum_debet,"0") from sums)
union
select * from sums where sum_debet in (select isnull(sum_kredit,"0") from sums)

select  t1.sum_debet, t1.sum_kredit, t1.doc_osn_no, t1.zachis_data, t2.sum_debet as f1, t2.sum_kredit as f2, t2.doc_osn_no as f3, t2.zachis_data  as f4 into #t1 from #t t1
inner join #t t2
on
t1.sum_debet=t2.sum_kredit and t1.doc_osn_no=t2.doc_osn_no and t1.zachis_data=t2.zachis_data

select sum_debet, sum_kredit, doc_osn_no, zachis_data from #t1
union
select f1,f2,f3,f4 from #t1
order by doc_osn_no

drop table #t
drop table #t1

получаем следующий резалт сет :

sum_debet     sum_kredit    doc_osn_no    zachis_data
______________________________________________________

null          200           4              4
200           null          4              4
null          43            6              5
43            null          6              5
null          55            7              7
55            null          7              7
_______________________________________________________

т.е. имеем пары строк, с sum_debet = sum_kredit и совпадающими значениями doc_osn_no и zachis_data
(ведь именно это от нас требовалось ?)

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

давай подставим в таблицу заместо 55, т.е.

............................................
0         null          7            7
null      0             7            7
............................................

в резалт сете видим изменение :

...........................................
null      0              7            7
0         null           7            7
...........................................

вернем 55 на место.
теперь, подставим 0 заместо null в строчке с 55 (хотя это полностью не соответствует условиям задачи, у fedor"а в одной из колонок должен обязательно быть null), но чисто из спортивного интереса :

............................................
55           0              7         7
null         55             7         7
............................................

в резалт сете соответственно получается :

............................................
null          55              7         7
55            0               7         7
............................................

дальше фантазии не хватает, куда еще можно 0 подставлять что-бы получить неверный результат. Если придумаешь - пиши.

теперь по поводу твоего "раб. варианта" из [4]. Если на приведенной выше таблице запустить вот этот код:

....................................................
SELECT * FROM sums
WHERE doc_osn_no IN
(
SELECT doc_osn_no FROM
(
SELECT doc_osn_no, count(*)  AS Col FROM sums
WHERE (sum_debet IS NULL) AND (sum_kredit IS NOT NULL)
GROUP BY doc_osn_no
) AS A
WHERE (Col =2)
)
......................................................
(я взял на себя смелость изменить там название таблицы, чтобы шло с моим примером).

резалт сет - пустой.

Заодно, по поводу твоей гневной тирады из [34]:

если у тебя есть хорошее решение, так доведи его до ума, если тебя просят о помощи. То, что многие здесь хотят просто получить раб. код совершенно не задействуя свою голову - это их проблемы, а не твои. Например, я если могу чем-то помочь, то помогаю не потому-то надеюсь в раю оказаться, а потому-что сам получаю ценный опыт, и лучше от этого только мне. Поэтому не вижу никаких проблем доводить дело именно до рабочего кода.

p.s. все сделано на microsoft sql server 2000, может ты просто на другом серваке делал ?


 
sniknik ©   (2004-09-11 12:46) [40]

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

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

> Заодно, по поводу твоей гневной тирады из [34]:
;), лстиш себе. я не настолько эмошионален чтобы гневатся. у меня тип флегматика.

p.s. в третий раз говорю насчет кода разговор окончен. сам проверяй если хочеш.

> теперь по поводу твоего "раб. варианта" из [4]. Если на приведенной выше таблице запустить вот этот код:
...
> (я взял на себя смелость изменить там название таблицы, чтобы шло с моим примером).

> резалт сет - пустой.
естественно, ведь это для первого (сколько можно повторять) условия
> 1)все кредиты, не имеющие "пары" с дебетом

> sum_debet   sum_kredit  doc_osn_no  zachis_data  
> ---------  -----------  ----------  ------------
> NULL        128.45         1        2004-08-02
> NULL        192.67         1        2004-08-02

т.е.
во всех кредитах (именно в кредитах!) цифра, в дебитах Null, и причем отобранны только пары.
у тебя нет такого, в твоих данных есть пары с цифрами с дебете и Null в кредите. это не по оригинальному условию (первому) и если это тоже нужно я предлагал автору подумать и сделать самому, благо делается простим изменением условия.

p.p.s. все. мне и трепаться на эту тему надоело.



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

Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.044 c
14-1095917397
pavel_guzhanov
2004-09-23 09:29
2004.10.10
Ассемблер


14-1095682249
infom
2004-09-20 16:10
2004.10.10
Что лучше применить ?


14-1095699462
}|{yk
2004-09-20 20:57
2004.10.10
Группа Тартак, или украинский рэп


1-1096050358
Kolan
2004-09-24 22:25
2004.10.10
Перебрать все имена папок в Директории


4-1094514486
BMP
2004-09-07 03:48
2004.10.10
Можно ли прочитать файл открытый в монопольном режиме?





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