Sql Server,选择任意给定日期某个位置的用户数
我有以下表格: 表A:Sql Server,选择任意给定日期某个位置的用户数,sql,sql-server-2008,Sql,Sql Server 2008,我有以下表格: 表A: [Location] [TotalUsers] LocationA 5 LocationB 10 LocationC 6 表B: [User] [FromLocation] [ToLocation] [StartDate] [EndDate] UserA LocationA LocationB 01/01/2013 05/05/2013 UserB LocationB
[Location] [TotalUsers]
LocationA 5
LocationB 10
LocationC 6
表B:
[User] [FromLocation] [ToLocation] [StartDate] [EndDate]
UserA LocationA LocationB 01/01/2013 05/05/2013
UserB LocationB LocationC 02/02/2013 04/04/2013
我还有一个日历表,可能会有帮助
我想做的是对日历表查询表B中的每个日期进行计算,以计算在任何给定的一天每个站点有多少用户。Alos使用表A中的总用户数,我可以得到每天的总用户数
理想情况下,结果数据集的格式为:
[Date] [LocationA] [LocationB] [LocationC]
01/01/2012 5 10 4
或
如果需要,我可以提供更多细节。表a
LOCATION TOTAL_USERS
LOCATION_A 5
LOCATION_B 10
LOCATION_C 6
表B
USER FROM_LOCATION TO_LOCATION START_DATE END_DATE
User_A LOCATION_A LOCATION_B 2013-01-01 2013-05-05
User_B LOCATION_B LOCATION_C 2013-02-02 2013-04-04
质疑
以上查询的结果
DATE_TO_QUERY LOCATION_A LOCATION_B LOCATION_C
2013-01-01 5 10 NULL
FromLocation
和ToLocation
代表什么?两者是否都对特定位置的用户数有贡献,还是只有一个?(例如,只有ToLocation
matters?)一些示例数据和预期结果会有所帮助(请在示例中包括多个位置和用户)。如果您可以向我们提供表结构,那么会更容易。谢谢
DECLARE @DATE_TO_QUERY datetime = '01/01/2013'
SELECT
DATE_TO_QUERY, LOCATION_A, LOCATION_B, LOCATION_C
FROM (
SELECT
A.TOTAL_USERS,
@DATE_TO_QUERY AS DATE_TO_QUERY,
A.LOCATION
FROM TableA A
INNER JOIN TableB B
ON A.LOCATION = B.FROM_LOCATION
OR A.LOCATION = B.TO_LOCATION
WHERE DATEDIFF(DD, START_DATE, @DATE_TO_QUERY) >= 0
AND DATEDIFF(DD, @DATE_TO_QUERY, END_DATE) >= 0
) up
PIVOT (SUM(TOTAL_USERS) FOR LOCATION IN (LOCATION_A, LOCATION_B, LOCATION_C)) AS pvt
DATE_TO_QUERY LOCATION_A LOCATION_B LOCATION_C
2013-01-01 5 10 NULL