我正在T-SQL
上运行SQL Server 2014
查询。查询及其输出如下:
Use MyDatabase
SELECT
ID,
ArrivalMonth,
DateOfBirth
FROM [View1]
WHERE [ArrivalMonth] between '2017-01-01' and '2018-05-01'
上面查询的输出看起来像这样(提取):
ID ArrivalMonth DateOfBirth
101 2017-01-01 1974-05-30
105 2017-05-01 1967-03-05
125 2017-05-01 NULL
... ... ...
我需要一个T-SQL
查询才能为我提供以下输出(基于上面的输出):
ArrivalMonth Number_Of_Bookings Number_Of_DOB_Captured
2017-01-01 130 110
2017-02-01 90 85
... ... ...
2018-05-01 115 70
第一列是ArrivalMonth
。 Number_Of_Bookings
是上述查询中的记录数。 Number_Of_DOB_Captured
是DateOfBirth
的计数,即NOT NULL
。
我认为可能是Pivot
查询可能是解决方案,但对于在这种情况下如何执行它,我感到困惑。
答案 0 :(得分:1)
您可以将包含所有月份的日历表加入当前表,然后进行汇总:
WITH months AS (
SELECT '2017-01-01' AS month UNION ALL
SELECT '2017-02-01' UNION ALL
...
SELECT '2017-12-01'
)
SELECT
m.month,
COUNT(*) AS Number_Of_Bookings,
COUNT(v.DateOfBirth) AS Number_Of_DOB_Captured
FROM months m
LEFT JOIN [View1] v
ON m.month = v.ArrivalMonth
WHERE
v.ArrivalMonth BETWEEN '2017-01-01' AND '2018-05-01'
GROUP BY
m.month;
如果由于某种原因,给定的到达月份在您的视图中没有与之相关联的数据,则可能需要日历表。如果确定该视图将始终包含每个月的数据,则可以直接在表上进行聚合而无需加入。
答案 1 :(得分:0)
您可以使用textViewHeightConstraint.constant = self.textView.contentSize.height
,count(Number_Of_Bookings)
和count(DateOfBirth)
因此,您需要为每个不同的group by ArrivalMonth
计算非空值的数量。
查询:
ArrivalMonth