Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Простой вопрос (число прочтений - 2489 )
U_zer
Экс-Участник


Простой вопрос
16. Декабря 2008 :: 13:48
Печать  
Всем привет!

Че-то запарился уже.
Есть 2 таблицы: 1- шапка, 2 - табл. часть.
В шапке и в табл. части есть реквизит Номер
Мне нужно посчитать количество номеров в шапке.

Запрос вида:

Код
Выбрать все
select
Док.DDate [ДатаД $Дата],
Count(Док.DNomer) [ЧС $число],
sum(ДокМЧ.TCSumma) [СуммаПрод $число]
from dbo.TChecks Док
inner join dbo.TChecksDT ДокМЧ on ДокМЧ.DDate = Док.DDate and ДокМЧ.DNomer = Док.DNomer and ДокМЧ.DTime = Док.DTime and ДокМЧ.DSklad = Док.DSklad and ДокМЧ.DProdavec = Док.DProdavec
where Док.DDate >= :ДатаНач and Док.DDate<= :ДатаКон and Док.DNomer<>''
group by Док.DDate
 



выдает нечто типа:
Дата 5 Сумма
А мне надо
Дата 3 Сумма, потому что всего три разных чека в шапке, и 5 товаров по этим чекам в табл. части. Почему он считает по табл части, не пойму? Помогите, а то абзац!
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Простой вопрос
Ответ #1 - 16. Декабря 2008 :: 13:54
Печать  
Count(distinct Док.DNomer)

Нерешительный
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Простой вопрос
Ответ #2 - 16. Декабря 2008 :: 14:01
Печать  
berezdetsky писал(а) 16. Декабря 2008 :: 13:54:
Count(distinct Док.DNomer)

Нерешительный


Круто! Я думал над таким фокусом, но не знал, что можно так извратиться ...
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Простой вопрос
Ответ #3 - 17. Декабря 2008 :: 06:49
Печать  
К сожалению, проблема осталась ...

Код
Выбрать все
select
Док.DDate [ДатаД $Дата], ДокМЧ.TCProizv [Производители $Справочник.Производитель],
Count(Distinct Док.DNomer) [ЧС $число],
sum(ДокМЧ.TCSumma) [СуммаПрод $число]
from dbo.TChecks Док
inner join dbo.TChecksDT ДокМЧ on ДокМЧ.DDate = Док.DDate and ДокМЧ.DNomer = Док.DNomer and ДокМЧ.DTime = Док.DTime and ДокМЧ.DSklad = Док.DSklad and ДокМЧ.DProdavec = Док.DProdavec
where Док.DDate >= :ДатаНач and Док.DDate<= :ДатаКон and Док.DNomer<>''
group by  Док.DDate, ДокМЧ.TCProizv 



Опять хрень какая-то. ДокМЧ.TCProizv - производитель товара.
В одном чеке может быть несколько товаров одного производителя. Запрос возвращает производителей и у каждого из них count равен 1. А мне нужно, чтобы считалось количество чеков по каждому производителю. Как-то можно победить?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Простой вопрос
Ответ #4 - 17. Декабря 2008 :: 07:04
Печать  
Цитата:
К сожалению, проблема осталась ...

Код
Выбрать все
select
Док.DDate [ДатаД $Дата], ДокМЧ.TCProizv [Производители $Справочник.Производитель],
Count(Distinct Док.DNomer) [ЧС $число],
sum(ДокМЧ.TCSumma) [СуммаПрод $число]
from dbo.TChecks Док
inner join dbo.TChecksDT ДокМЧ on ДокМЧ.DDate = Док.DDate and ДокМЧ.DNomer = Док.DNomer and ДокМЧ.DTime = Док.DTime and ДокМЧ.DSklad = Док.DSklad and ДокМЧ.DProdavec = Док.DProdavec
where Док.DDate >= :ДатаНач and Док.DDate<= :ДатаКон and Док.DNomer<>''
group by  Док.DDate, ДокМЧ.TCProizv 



Опять хрень какая-то. ДокМЧ.TCProizv - производитель товара.
В одном чеке может быть несколько товаров одного производителя. Запрос возвращает производителей и у каждого из них count равен 1. А мне нужно, чтобы считалось количество чеков по каждому производителю. Как-то можно победить?

наверное так
Код
Выбрать все
select proizv1 [Производители $Справочник.Производитель],sum(kolvo1)
from (

select
distinct  ДокМЧ.TCProizv as proizv1,Док.IDDOC,1 as kolvo1
from TChecks Док
inner join ChecksDT ДокМЧ on ДокМЧ.DDate = Док.DDate and ДокМЧ.DNomer = Док.DNomer and ДокМЧ.DTime = Док.DTime and ДокМЧ.DSklad = Док.DSklad and ДокМЧ.DProdavec = Док.DProdavec
where Док.DDate >= :ДатаНач and Док.DDate<= :ДатаКон and Док.DNomer<>''
) as tabl_1
group by proizv1
 


  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Простой вопрос
Ответ #5 - 17. Декабря 2008 :: 07:36
Печать  
ps для 0
не смешивай запросы то используя то нет dbo перед таблицей:
для
select * from dbo.TChecksDT
и
select * from TChecksDT

sql server будет хранить два плана выполнения этих запросов.

Если же эти select-ы вызываются из хранимой процедуры(sp)
то всегда один план выполнения.
----------
для вызова sp всегда надо ставить dbo  ( чего кстати 1с не делает) потому что поиск имени идет быстрее.
для описания sp тоже надо ставить.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Простой вопрос
Ответ #6 - 17. Декабря 2008 :: 09:03
Печать  
Цитата:
Код
Выбрать все
select
Док.DDate [ДатаД $Дата], ДокМЧ.TCProizv [Производители $Справочник.Производитель],
Count(Distinct Док.DNomer) [ЧС $число],
sum(ДокМЧ.TCSumma) [СуммаПрод $число]
from dbo.TChecks Док
inner join dbo.TChecksDT ДокМЧ on ДокМЧ.DDate = Док.DDate and ДокМЧ.DNomer = Док.DNomer and ДокМЧ.DTime = Док.DTime and ДокМЧ.DSklad = Док.DSklad and ДокМЧ.DProdavec = Док.DProdavec
where Док.DDate >= :ДатаНач and Док.DDate<= :ДатаКон and Док.DNomer<>''
group by  Док.DDate, ДокМЧ.TCProizv 



Опять хрень какая-то. ДокМЧ.TCProizv - производитель товара.
В одном чеке может быть несколько товаров одного производителя. Запрос возвращает производителей и у каждого из них count равен 1. А мне нужно, чтобы считалось количество чеков по каждому производителю. Как-то можно победить?

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

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Простой вопрос
Ответ #7 - 17. Декабря 2008 :: 09:21
Печать  
IMHO, этот запрос возвращает то, что ты хочешь. Можешь показать тестовый набор данных и ожидаемый результат?

Я тоже так думал ...
DDate                                   DNomer      
2008-04-15 00:00:00.000                    1                  10OF           0        143           0        В-166МО  
2008-04-15 00:00:00.000                    3                  10OF           0        37           0        В-166МО  
2008-04-15 00:00:00.000                    34                  10OF           0        161           0        В-166МО  
2008-04-15 00:00:00.000                                        10OF           0        13014           0        В-166МО  
2008-04-15 00:00:00.000                                        10OF           0        103,96          N6OF      В-166МО  
2008-04-15 00:00:00.000                    2                  10OF           0        475           0        В-166МО  
2008-04-16 00:00:00.000                    1                   6             0        391,4         25COF      СЮ-232МИЦ
2008-04-16 00:00:00.000                    2                   6             0        1270         39Q1        СЮ-232МИЦ
2008-04-16 00:00:00.000                    3                   6             0        4180         2MYOF      СЮ-232МИЦ
Таб часть
DDate                                 DNomer                                                                                                DProizv
2008-04-15 00:00:00.000                    1                  10OF      2           0        HHAN4P        1      73          4G  
2008-04-15 00:00:00.000                    1                  10OF      2           0        HHAS0JOF      1      70          3Z  
2008-04-15 00:00:00.000                    3                  10OF      2           0        HHB0FZOF      1      37          4B  
2008-04-15 00:00:00.000                    34                  10OF      2           0           585        1      161           G  
2008-04-15 00:00:00.000                                        10OF      2           0        HHAK7C        1      410          4B  
2008-04-15 00:00:00.000                                        10OF      2           0        HHB5OA1        2      506          6LOF
2008-04-15 00:00:00.000                                        10OF      2           0        HHAS93OF      1      173          40  
2008-04-15 00:00:00.000                                        10OF      2           0        HHASIFOF      1      51          40  
2008-04-15 00:00:00.000                                        10OF      2           0        HHB82C1        1      6400          851  
2008-04-15 00:00:00.000                                        10OF      2           0           3OB        1      740           G  
2008-04-15 00:00:00.000                                        10OF      2           0        HHAJX5        2      1400          4B  
2008-04-15 00:00:00.000                                        10OF      2           0        HHANTO        1      125          4B  
2008-04-15 00:00:00.000                                        10OF      2           0        HHAP99        1      715          4B  
2008-04-15 00:00:00.000                                        10OF      2           0        HHB421        1      730          7COF
2008-04-15 00:00:00.000                                        10OF      2           0        HHB4PJ1        1      420          7COF
2008-04-15 00:00:00.000                                        10OF      2           0           4N4        1      320          1L  
2008-04-15 00:00:00.000                                        10OF      2           0        HHAO4X        1      163          40  
2008-04-15 00:00:00.000                                        10OF      2           0        HHAV6KOF      1      131          1L  
2008-04-15 00:00:00.000                                        10OF      2           0        HHAVVBOF      1      730          4D  
2008-04-15 00:00:00.000                                        10OF      2           0        HHAJQ4        1      103,96          30  
2008-04-15 00:00:00.000                    2                  10OF      2           0        HHB44P        1      475          6NOF
2008-04-16 00:00:00.000                    1                   6        3           0        HHAJMJ        1      391,4          68OF
2008-04-16 00:00:00.000                    2                   6        3           0        HHARQQOF      1      1188          4VOF
2008-04-16 00:00:00.000                    2                   6        3           0           3O2        100      12          17  
2008-04-16 00:00:00.000                    2                   6        3           0           3OI        500      70          17  
2008-04-16 00:00:00.000                    3                   6        3           0        HHB53B1        1      4180          15  

Ожидаемый результат: DDate  Число чеков Sum
                                   15             4             816   
                                   16             3             5841         
Или                             DDate/Proizv      Число чеков   Sum
                                  15                          4                816
                                  Германия    (общее число чеков)                  161
                                итд ..
                                  16                        3                         5841
                                   США (общее число чеков на дату)   82


                                   
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Простой вопрос
Ответ #8 - 17. Декабря 2008 :: 09:56
Печать  
Таки да - с условием

Док.DNomer<>''

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

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Простой вопрос
Ответ #9 - 17. Декабря 2008 :: 10:10
Печать  
berezdetsky писал(а) 17. Декабря 2008 :: 09:56:
Таки да - с условием

Док.DNomer<>''

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


Угу но в результате по группировкам Date Proizv
Чеки                    Число чеков                  Всего
15.04.08                           5                     816.00
Германия, AiFa                1                   475.00
Германия, Gardena                1                   161.00
Италия, GAV                1                   37.00
Россия, Комз-Экспорт", г.Каменск  1           73.00
Тайвань, Sumake            1      70.00

16.04.08                          4                      5,841.40
Англия, Stanley            1      4,180.00
Канада, FIT            1      1,188.00
Россия, Иплана            1      391.40
США, Omax            1      82.00

а на самом деле -
Чеки            Число чеков      Всего
15.04.08            4                   816.00
16.04.08            3                   5,841.40
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Простой вопрос
Ответ #10 - 17. Декабря 2008 :: 10:30
Печать  
Цитата:
а на самом деле -
Чеки            Число чеков      Всего
15.04.08            4                   816.00
16.04.08            3                   5,841.40

Ну да. И этот результат получается запросом из #0 (с добавлением distinct). Осталось соединить два запроса или два разультата на клиенте - по необходимости.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать