嵌套求和的SQL查询

时间:2011-05-03 13:37:11

标签: sql sql-server

我现在不得不写一个非常复杂的查询,但我陷入困境。表结构如下

sql linked query

查询通过名为Inquiry_ID的字段链接到Timelog。我现在的代码可以带来总分钟数,但是对于整个表而不是每个公司。我基本上是在追求:

两列一个用于公司名称(dbo.inquiry.concom),另一列用于总分钟。表格查询保留同一公司的100个条目,我想要一行返回公司名称一次,以及从TIMELOG.LOGMINS计算该公司名称的总分钟数

例如,dbo.inquiry中有50个条目具有相同的公司名称,我希望它显示一个独特的公司,但我需要它来计算另一个表中的分钟数。我完全失去了!

DECLARE @StartDate DATETIME, @EndDate DATETIME
SET              @StartDate = dateadd(mm, - 1, getdate())
SET              @StartDate = dateadd(dd, datepart(dd, getdate()) * - 1, @StartDate)
SET              @EndDate = dateadd(mm, 1, @StartDate)
SELECT DISTINCT TOP 100 PERCENT dbo.INQUIRY.CONCOM, TIMELOG_1.LOGMINS, dbo.INQUIRY.ESCDATE,  dbo.INQUIRY.INQUIRY_ID,
                                                  (SELECT     SUM(LOGMINS) AS Expr1
                                                    FROM          dbo.TIMELOG
                                                    WHERE      dbo.INQUIRY.ESCDATE BETWEEN @Startdate AND @EndDate) AS TOTALMINUTES
                       FROM         dbo.INQUIRY INNER JOIN
                                              dbo.TIMELOG AS TIMELOG_1 ON dbo.INQUIRY.INQUIRY_ID = TIMELOG_1.INQUIRY_ID INNER JOIN
                                              dbo.PROD ON dbo.INQUIRY.PROD_ID = dbo.PROD.PROD_ID INNER JOIN
                                              dbo.CATEGORY ON dbo.PROD.CATEGORY_ID = dbo.CATEGORY.CATEGORY_ID
                       WHERE     dbo.INQUIRY.ESCDATE BETWEEN @Startdate AND @EndDate
                       ORDER BY dbo.INQUIRY.CONCOM

编辑:类别和产品表的原因是因为我需要根据产品是否属于特定类别来排除计数。

1 个答案:

答案 0 :(得分:3)

SELECT  i.concom, COALESCE(SUM(t.logmins), 0)
FROM    inquiry i
LEFT JOIN
        timelog t
ON      t.inquiry_id = i.inquiry_id
GROUP BY
        i.concom