2014-01-16 39 views
0

我有这样的SQL查询总结多表父子关系的公共列在SQL Server

SELECT  dbo.a.Agency, SUM(COALESCE (dbo.b.total, 0)) + SUM(COALESCE (dbo.c.total, 0)) 
        + SUM(COALESCE (dbo.d.total, 0)) AS Expr1, 
dbo.b.date as date, 
dbo.c.Date AS Expr2, 
dbo.d.Date AS Expr3 
FROM   dbo.c RIGHT OUTER JOIN 
        dbo.a ON dbo.d.Agency = dbo.a.Agency LEFT OUTER JOIN 
        dbo.c ON dbo.a.Agency = dbo.c.Agency LEFT OUTER JOIN 
        dbo.b ON dbo.a.Agency = dbo.b.Agency 
GROUP BY dbo.a.Agency, dbo.b.Date, dbo.c.Date, dbo.d.Date 

我想实现的是组在同一时间3个日期字段。所以结果看起来像这样

+------+-------+----+ 
|Agency|expr1 |Date| 
+------+-------+----+ 
|abc |500000 |18 | 
+------+-------+----+ 
|def |6000000|18 | 
+------+-------+----+ 
|abc |550000 |19 | 
+------+-------+----+ 
|def |750000 |19 | 
+------+-------+----+ 

日期只是包含int值,如示例演示。他们被链接到另一个可以使用的表格,如果这更容易。

当前的代码只显示每行的每个日期值的1行。如果我使用的过滤器使用ANDOR它显示不正确的结果

回答

0

没关系。我通过使用交叉应用并在where子句中使用Date = 21来解决此问题