我对SQL比较陌生。而且我一直在努力地编写一个非常简单的查询,该查询返回一行。
我试图从几个不同的表中选择多个列值计数,每个计数都针对相同的日期范围。
我的数据库中的表类似于:
| CreationDate | LastName | EventType |
|:--------------------|------------:|:------------:| ...
| 2013-01-02 18:00:21 | Doe | 2 |
| 2013-01-07 18:00:24 | Blanks | 2 | ...
| 2013-01-09 17:00:21 | Puccini | 1 |
所有表都有一个相似的CreationDate列。
现在,我的查询是一个类似于以下内容的JOIN(似乎可行)。我正在尝试添加一个或多个JOIN,以便可以将每个表的多个计数返回到单行结果。我当前的查询:
DECLARE @startdate DATETIME = '##startdate##';
DECLARE @enddate DATETIME = '##enddate##';
SELECT ISNULL(t2.Year, t1.Year) ,
ISNULL(t2.Month, t1.Month) ,
t1.LastName1 ,
t2.LastName2
FROM ( SELECT DATEPART(year, table1.CreationDate) Year ,
DATEPART(month, table1.CreationDate) Month ,
COUNT(table1.column2) LastName1
FROM table1
WHERE EventType = 2
AND CreationDate BETWEEN @startdate AND @enddate
GROUP BY DATEPART(year, table1.CreationDate) ,
DATEPART(month, table1.CreationDate)
) AS t1
JOIN
( SELECT DATEPART(year, table2.CreationDate) Year ,
DATEPART(month, table2.CreationDate) Month ,
COUNT(table2.column2) LastName2
FROM table2
WHERE EventType = 1
AND CreationDate BETWEEN @startdate AND @enddate
GROUP BY DATEPART(year, table2.CreationDate) ,
DATEPART(month, table2.CreationDate)
) AS t2 ON t1.Year = t2.Year
AND t1.Month = t2.Month
ORDER BY t1.Year ,
t1.Month
我可以添加更多JOIN吗?(我已经尝试过并且迷失了方向。)或者还有另一种方法来只返回每个选定列中指定日期范围内的COUNT(值)。
任何帮助,将不胜感激。
DECLARE @startdate DATETIME
set @startdate= '2013-01-02 18:00:21.000';
DECLARE @enddate DATETIME
set @enddate= '2013-01-09 17:00:21.000';
SELECT YEAR ,
MONTH ,
[1] ,
[2]
FROM ( (SELECT DATEPART(year, CreationDate) Year ,
DATEPART(month, CreationDate) Month ,
eventType ,
COUNT(LastName) namecount
FROM table1
WHERE CreationDate BETWEEN @startdate AND @enddate
GROUP BY DATEPART(year, CreationDate) ,
DATEPART(month, CreationDate) ,
EventType)
union all
(SELECT DATEPART(year, CreationDate) Year ,
DATEPART(month, CreationDate) Month ,
eventType ,
COUNT(LastName) namecount
FROM table2
WHERE CreationDate BETWEEN @startdate AND @enddate
GROUP BY DATEPART(year, CreationDate) ,
DATEPART(month, CreationDate) ,
EventType )
) u PIVOT( SUM(namecount) FOR eventtype IN ( [1], [2] ) ) as pvt
ORDER BY Year ,
Month
如果您想添加更多事件类型,只需在内部PIVOT()
也添加为[[1],[2],[3] ..)SELECT
添加任意数量的表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句