Как я могу присоединиться к этим запросам вместе? - PullRequest
0 голосов
/ 01 июля 2019

У меня 2 запроса.Один включает подзапрос, а другой - довольно простой запрос.Я не могу понять, как их объединить, чтобы получить таблицу с именами, рабочими датами, минутами и активными часами.

У меня есть код ниже для того, что я пробовал.Простой запрос - это строки 1,2 и последние 5 строк.Я также добавил к нему предложение соединения (join punchclock p для p.servrepID = l.repid).

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

select 
    sr.sr_name as liaison, cast(date_created as date) workdate, 
    (count(date_created) * 4) as minutes_inactive,
    (select 
         sr_name, cast(punchintime as date) as workdate,
         round(sum(cast(datediff(minute,punchintime, punchouttime) as real) / 60), 2) as hoursworked,
         count(*) as punches
     from
         (select 
              sr_name, punchintime = punchdatetime,
              punchouttime = isnull((select top 1 pc2.punchdatetime 
                                     from punchclock pc2 
                                     where pc2.punchdatetime > pc.punchdatetime 
                                       and pc.servrepid = pc2.servrepid 
                                       and pc2.inout = 0 
                                     order by pc2.punchdatetime), getdate())
          from 
              punchclock pc
          join 
              servicereps sr on pc.servrepid = sr.servrepid
          where 
              punchyear >= 2017 and pc.inout = 1
          group by 
              sr_name, cast(punchintime as date)))
from 
    tbl_liga_popup_log l
join 
    servicereps sr on sr.servrepID = l.repid
join 
    punchclock p on p.servrepID = l.repid collate latin1_general_bin
group by 
    cast(l.date_created as date), sr.sr_name

Я получаю эту ошибку:

Msg 102,Уровень 15, состояние 1, строка 19
Неверный синтаксис рядом с ')'

Я продолжаю получать эту ошибку, но есть и другие ошибки, если я настраиваю эту часть.

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Большая ошибка здесь заключается в том, что вы размещаете запросы в разделе select (до from). Вы можете сделать это, только если запрос возвращает одно значение. Иначе, вы должны поместить свой запрос в круглые скобки (вы сделали это) в разделе from, дать ему псевдоним и присоединить его соответственно.

Вы также, похоже, используете group by s, которые нигде не нужны. Я не вижу функции агрегирования, такие как sum().

Лучше всего, если вы ищете следующий запрос:

select 
    sr_name as liaison
    ,cast(date_created as date) workdate
    ,count(distinct date_created) * 4 as minutes_inactive
    ,cast(punchintime as date) as workdate
    ,round(sum(cast(datediff(minute,punchintime,isnull(pc2_query.punchouttime,getdate())) as real) / 60), 2) as hoursworked
    ,count(*) as punches
from 
    punchclock pc
    inner join servicereps sr on pc.servrepid = sr.servrepid
    cross apply
    (
        select top 1 pc2.punchdatetime as punchouttime
        from punchclock pc2 
        where pc2.punchdatetime > pc.punchdatetime 
            and pc.servrepid = pc2.servrepid 
            and pc2.inout = 0 
            order by pc2.punchdatetime
    )q1
    inner join tbl_liga_popup_log l on sr.servrepID = l.repid
where punchyear >= 2017 and pc.inout = 1
0 голосов
/ 01 июля 2019

Я не знаю, что мы здесь все исправим, но есть несколько проблем с вашим запросом.

  1. Вы должны псевдоним вашего подзапроса (технически производная таблица, ночто угодно)
  2. У вас есть два исходных кода в вашем внешнем запросе.
  3. Вы должны присоединиться к производной таблице.

Вот грубый пример:

select
<some stuff>
from
(select col1 from table1) t1 
inner join t2
on t1.col1 = t2.col2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...