2011-05-03 60 views
1

我现在不得不编写相当复杂的查询,但我陷入困境。该表结构如下使用嵌套金额的SQL查询

sql linked query

询问由称为Inquiry_ID字段链接到Timelog。我目前的代码会将总分钟数回归到整个表格而不是每个公司。我基本上是:

公司名称(dbo.inquiry.concom)和总分钟的另一列。表INQUIRY认为同一家公司的100个条目,我想要一行返回公司名称一次,并从TIMELOG.LOGMINS计算该公司名称的总分钟数

因此,例如dbo中有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 

编辑:类别和产品表的原因是因为我需要根据产品是否在某个类别中排除计数。

+0

对不起 - 那个标签错了。它似乎有人已经为我重制了,所以谢谢:) – Trinitrotoluene 2011-05-03 13:47:41

回答

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