如何将这些查询一起加入?

时间:2019-07-01 18:17:51

标签: sql sql-server

我有2个查询。一个包括一个子查询,另一个是一个非常基本的查询。我不知道如何组合它们以返回名称,工作日期,未激活分钟数和工作时间的表。

下面是我尝试过的代码。简单的查询是第1,2行,最后5行。我还添加了一个join子句(p.servrepID = l.repid上的joinpunchclock p)。

这两个查询都是独立运行的,因此这仅仅是合并它们的问题。

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

我收到此错误:

  

第15级州立19行第102条消息
  ')'附近的语法不正确

我一直收到此错误,但是如果我调整该部分,还会有更多错误。

2 个答案:

答案 0 :(得分:0)

我不知道我们会在这里修复所有问题,但是您的查询存在一些问题。

  1. 您必须为子查询(技术上是派生表,但无论如何)加上别名
  2. 外部查询中有两个froms。
  3. 您必须加入派生表。

这是一个粗略的例子:

select
<some stuff>
from
(select col1 from table1) t1 
inner join t2
on t1.col1 = t2.col2

答案 1 :(得分:0)

此处最大的错误是您将查询放在async function processLineByLine() { const rl = readline.createInterface({ input: fs.createReadStream('C:/Users/T440/Documents/crawl/links.txt'), crlfDelay: Infinity }); for await (const line of rl) { if (line.startsWith('https://www.example.com')) { var encodeLink = encodeURI(line); const response = await axios.get(encodeLink).catch((err)=>{节中(在select之前)。仅当查询返回单个值时,您才能执行此操作。否则,您必须将查询放在from部分的括号中(已完成此操作),为它提供一个别名,然后进行相应的连接。

您似乎也正在使用from,这些在任何地方都不需要。我看不到group by之类的聚合函数。

我最好的选择是您正在寻找以下查询:

sum()