|
Вывод записей
|
|||
---|---|---|---|
#18+
Всем добрый день! Подскажите пожалуйста, есть небольшой запрос и получается, что dlit (длительность) выводится несколько раз из-за связи mktsreg.n_kdk = t.C_KTHR, что можно сделать?.. Если вкратце описывать что тут в запросе происходит - dmz.kdmt = 'ДСЕ1' (тип документа); tthr (таблица с доп. характеристиками, которая связывается с таблицей документов по уникальному ключу undoc, FAM - название доп. характеристики); PRTR (таблица с длительностью перемещений со склада (ceh_o ) на другой склад (ceh_k)); mktsreg (таблица регистрации выработки, где рабочие регистрируют выработку. Соответственно на одного человека за один день может быть зарегистрировано от 2-х и больше выработок, регистрация выработки так же связывается с доп. характеристиками по уникальному полю n_kdk (табельный номер сотрудника)). Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Как пример, получается так: date: 01-06-21 unmktsreg: 1234 sum_dd: 300 date: 01-06-21 unmktsreg: 5246 sum_dd: 300 date: 01-06-21 unmktsreg: 4875 sum_dd: 300 А нужно так: date: 01-06-21 unmktsreg: 1234 sum_dd: 300 date: 01-06-21 unmktsreg: 5246 sum_dd: 0 date: 01-06-21 unmktsreg: 4875 sum_dd: 0 Помогите пожалуйста разобраться.. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2021, 19:22 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Raze, если mktsreg.n_kdk это уникальный номер сотрудника, то поле C_KTHR из таблицы tthr должно соответствовать этому номеру. Это единственное чем можно связать таблицы? и верно ли они связаны вообще? Если связь установлена неправильно, то "top 1" будет всегда вытаскивать не тот "top 1", который нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 15:28 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
ol_chig, да, единственное чем можно связать таблицы ммм.... можно использовать left join, но по сути это ничего не даст, тоже уже пробовал менять связь.. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 15:53 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
select DATEADD(minute, -30, mktsreg.date_d) as date, mktsreg.unmktsreg as unmktsreg ,isnull((select top 1 prtr.dlit from dmz inner join tthr t on t.strkey=str(dmz.UNDOC,10) and t.kthr = 'FAM' inner join PRTR on dmz.ceh_o = prtr.ceh_o and dmz.ceh_k = prtr.ceh_k where dmz.kdmt = 'ДСЕ1' and mktsreg.n_kdk = t.C_KTHR group by prtr.dlit),0 ) as sum_dd from mktsreg where cast(DATEADD(minute, -30, mktsreg.date_d) as date) BETWEEN @dateFrom AND @dateTo Как пример, получается так: date: 01-06-21 unmktsreg: 1234 sum_dd: 300 date: 01-06-21 unmktsreg: 5246 sum_dd: 300 date: 01-06-21 unmktsreg: 4875 sum_dd: 300 У Вас фактически две таблицы - одна синяя, а другая красная. И они не связаны не каким условием между собой. В красной части должно стоять ещё что-то типа and dmz.unmktsreg = mktsreg.unmktsreg после dmz.kdmt = 'ДСЕ1' and mktsreg.n_kdk = t.C_KTHR PS Вообще какой-то мутный запрос. Удалите его и напишите заново, чем в этом разбираться ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 18:45 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
SIMPLicity_, dmz мне нечем присоединить к mktsreg, поэтому и есть доп. характеристики, которые связывается с dmz, а потом с mktsreg. может и правы, проще попробовать еще раз заново)) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 07:55 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Raze, автор dlit (длительность) выводится несколько раз Очевидно, это неверное утверждение, т.к. для каждой строки mktsreg формируется единственное значение prtr.dlit в указанном запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 12:17 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Владислав Колосов, не очень сейчас понял почему не верное утверждение.. Т.е. в mktsreg есть допустим 3 строки зарегистрированные на одного человека, выходит следующим образом: date: 01-06-21 unmktsreg: 1234 n_kdk: 489 sum_dd: 300 date: 01-06-21 unmktsreg: 5246 n_kdk: 489 sum_dd: 300 date: 01-06-21 unmktsreg: 4875 n_kdk: 489 sum_dd: 300 Для все этих трех строк n_kdk одинаковый и далее получается, что mktsreg связывается с tthr по полю n_kdk из-за этого sum_dd для всех строк какие есть проставляет одно и тоже значение И как это ограничить, чтобы данные выводились только для одной строки, а не для всех, пока загадка) даже переделывая запрос, получается тоже самое... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 14:37 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Raze, а почему значение должно подставиться именно к записи с unmktsreg = 1234, а не к 5246, например? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 15:07 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Посетитель, это самая первая строка просто, но если было бы что-то вроде такого: date: 01-06-21 unmktsreg: 1234 n_kdk: 489 sum_dd: 0 date: 01-06-21 unmktsreg: 5246 n_kdk: 489 sum_dd: 300 date: 01-06-21 unmktsreg: 4875 n_kdk: 489 sum_dd: 0 то против я вряд ли был :D ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 15:14 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Raze, какая разница, сколько строк, Вы выбираете при помощи TOP 1 любую одну строку из этого списка. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 15:18 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Raze, ну добавь case when row_number()over(partition by mktsreg.n_kdk order by mktsreg.unmktsreg) = 1 then твой_подзапрос else 0 end ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 15:19 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Владислав Колосов, ему, похоже, надо результаты подзапроса прилеплять не ко всем строкам запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 15:20 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Посетитель, в таком случае автор неверно задал вопрос, он должен был спросить - почему я вынужден писать TOP 1 в подзапросе? Ответ на этот вопрос можно получить путём анализа данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 15:25 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Владислав Колосов, top 1 тут вообще ни при чём. он нужен совершенно по другой причине. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 15:28 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Посетитель, вот это номер, ни разу не приходилось пользоваться такой штукой.. Теперь верно выводится, одна строка имеет определенное значение, а остальные занулились Большое человеческое всем спасибо! Особенно огромное Посетителю) Надо будет поизучать данную схему на будущее Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 15:31 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Посетитель Владислав Колосов, top 1 тут вообще ни при чём. он нужен совершенно по другой причине. Как раз причём, потому, что автор вынужденно это написал и получил последствия такого решения. Без TOP 1 у него будет набор данных {0,300,100500}. Он выбирает из этого набора первое попавшееся для каждой строки из mktsreg, а потом задает вопрос - "что я делаю не так?". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 18:45 |
|
Вывод записей
|
|||
---|---|---|---|
#18+
Владислав Колосов, что за фантазии?... без top 1 запрос просто упадет в ошибку если вдруг в подзапросе окажется больше одной записи а вопрос "почему в подзапросе может быть несколько записей" никак не относится к задаче "выводить результаты подзапроса только для одной из строк основного запроса". Upd. при этом, схема в целом выглядит кривой, либо автор не знает о каких то связях. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2021, 19:07 |
|
|
start [/forum/topic.php?fid=46&fpage=20&tid=1684547]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 259ms |
total: | 379ms |
0 / 0 |