[英]SQL over partition count then group by month
我一直在COUNT(value) OVER (PARTITION BY anothervalue)
使用COUNT(value) OVER (PARTITION BY anothervalue)
,我喜欢它从我的数据库中提取结果的速度。 我现在正在尝试加强工作,以便我可以创建一个表格来显示多个计数 - 每个月一个,并排。 我不确定是否可能,但想在这里检查。 我在网上环顾四周,但找不到任何之前被问过的问题的例子,所以没有线索。
这是我目前拥有的:
SELECT DISTINCT
TBL.CATEGORY as 'Category Name',
COUNT(TBL.ROW_ID) OVER (PARTITION BY TBL.CATEGORY) as 'Rows in Category'
FROM
MYDB.TBL
WHERE
TBL.FIELD1 = 'something'
AND TBL.FIELD2 = 'somethingelse'
AND TBL.CREATED >= '2014-01-01'
ORDER BY [Rows in Category] desc
给了我一个像这样的可爱的桌子:
Category Name |Rows in Category
ABC | 166
CBA | 137
CCC | 112
我现在想要的地方是按月细分,这样我的输出最终看起来像这样(不必精确,标题可以随意移动):
JANUARY |FEBRUARY
Category Name |Rows in Category | Category Name |Rows in Category
ABC | 162 | CBA | 51
CBA | 86 | CCC | 32
CCC | 70 | ABC | 4
当我尝试添加GROUP BY
它会引发关于聚合函数中未包含某些内容的错误。
如果必须的话,我可以将查询堆叠在一起,并将每个查询限制为仅显示一个月,但这似乎是很多重复代码,如果可以完成,我更喜欢并排视图。
有任何想法吗?
格式将与您描述的不完全相同。 但这将是显示结果的正常方式,并且已包含所有信息,请确保一次显示的时间不超过 1 年。
尝试这个:
;WITH x AS
(
SELECT TBL.CATEGORY, TBL.ROW_ID, datename(month, TBL.CREATED) month
FROM
MYDB.TBL
WHERE
TBL.FIELD1 = 'something'
AND TBL.FIELD2 = 'somethingelse'
AND TBL.CREATED >= '2014-01-01'
AND TBL.CREATED < '2015-01-01'
)
SELECT CATEGORY as 'Category Name', [January],[February]
FROM x
PIVOT(
count([ROW_ID])
FOR month
in([January],[February])
)AS p
@t-clausen.dk 感谢您对此的帮助。 我以前没有使用过coalesce,所以我今天学到了一些有用的东西。 最后,因为事实证明我无论如何都需要一个总列,所以我添加了一个 YTD 列并且能够通过它进行排序。
想发布最终结果,以防对其他人有用:
WITH X AS
(
SELECT
tbl.category,
tbl.row_id,
DATENAME(MONTH, tbl.created) MONTH,
COUNT(tbl.row_id) OVER (PARTITION BY tbl.category) AS 'YTD'
FROM
db.tbl
WHERE
tbl.randomcolumn = 'something specific'
AND tbl.anothercolumn = 'something else specific'
AND created >= '2014-01-01'
AND created < '2015-01-01'
)
SELECT
category AS 'Category Name',
[January], [February], [March], [April], [May], [June], [July], [August], [September], [October], [November], [December],
[YTD]
FROM X
PIVOT
(COUNT([row_id])
FOR MONTH
in([January], [February], [March], [April], [May], [June], [July], [August], [September], [October], [November], [December])
)AS P
ORDER BY [YTD] DESC
如果要重新调整此查询的用途,请为您自己的 db/table 中的等效项切换小写部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.