Roy*_*mir 7 t-sql sql-server sql-server-2005
我有这个简单的查询:
SELECT YEAR(P.DateCreated)
,MONTH(P.DateCreated)
,COUNT(*) AS cnt
FROM tbl1,
tbl2....
GROUP BY
MONTH(P.DateCreated)
,YEAR(P.DateCreated)
Run Code Online (Sandbox Code Playgroud)
这会发出:

现在我需要相同的查询,但每年只使用groupby :
所以:
SELECT YEAR(P.DateCreated)
,COUNT(*) AS cnt
FROM tbl1,
tbl2....
GROUP BY
YEAR(P.DateCreated)
Run Code Online (Sandbox Code Playgroud)
我不希望做2个查询.
有什么方法可以在group by这里做到吗?
我可以做一个被另一个所取代,但我不能做一个由两个替代 ...
GROUP BY
CASE WHEN @timeMode='y' THEN YEAR(P.DateCreated)
WHEN @timeMode='m' THEN MONTH(P.DateCreated), YEAR(P.DateCreated) end
Run Code Online (Sandbox Code Playgroud)

任何帮助?
Mar*_*ith 17
使用两个单独的查询会更好,但可以这样做
GROUP BY YEAR(P.DateCreated),
CASE
WHEN @timeMode='m' THEN MONTH(P.DateCreated) end
Run Code Online (Sandbox Code Playgroud)
因为WHEN @timeMode <> 'm'第二个GROUP BY表达式将NULL适用于所有行而不会影响结果.
您可以使用一个over子句在一个查询中返回每年和每月的计数:
SELECT distinct YEAR(P.DateCreated) as Year
, MONTH(P.DateCreated) as Month
, COUNT(*) over (partition by YEAR(P.DateCreated), MONTH(P.DateCreated))
as MonthCount
, COUNT(*) over (partition by YEAR(P.DateCreated)) as YearCount
FROM YourTable P
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19855 次 |
| 最近记录: |