34,593
社区成员
发帖
与我相关
我的任务
分享
if OBJECT_ID(N'TEMPDB..#T') IS NOT NULL
drop table #T
GO
CREATE TABLE #T
(STAFF_ID VARCHAR(10),
START_DATE DATETIME,
END_DATE DATETIME,
DEPART_ID VARCHAR(10))
INSERT INTO #T
SELECT 'C','2017/1/1','2017/1/31','001' UNION ALL
SELECT 'D','2017/3/1','2017/5/31','002' UNION ALL
SELECT 'E','2017/5/1',NULL,'001' UNION ALL
SELECT 'F','2017/8/1',NULL,'001'
GO
WITH CTE
AS
(SELECT CAST(A.number+1 AS VARCHAR)+'月' AS [MONTH],
SUM(CASE WHEN DATEADD(MONTH,NUMBER,'2017-01-01') BETWEEN START_DATE AND ISNULL(END_DATE,GETDATE()) THEN 1 ELSE 0 END) AS AMOUNT,
DEPART_ID
FROM master..spt_values A
JOIN #T B ON 1=1
WHERE TYPE='P'
AND number<=11
GROUP BY A.number+1,DEPART_ID
)
SELECT DEPART_ID,
[1月],[2月],[3月],[4月],[5月],[6月],[7月],[8月],[9月],[10月],[11月],[12月]
FROM CTE
PIVOT (SUM(AMOUNT) FOR MONTH IN([1月],[2月],[3月],[4月],[5月],[6月],[7月],[8月],[9月],[10月],[11月],[12月])) AS B
[/quote]
非常感谢,学习了!
if OBJECT_ID(N'TEMPDB..#T') IS NOT NULL
drop table #T
GO
CREATE TABLE #T
(STAFF_ID VARCHAR(10),
START_DATE DATETIME,
END_DATE DATETIME,
DEPART_ID VARCHAR(10))
INSERT INTO #T
SELECT 'C','2017/1/1','2017/1/31','001' UNION ALL
SELECT 'D','2017/3/1','2017/5/31','002' UNION ALL
SELECT 'E','2017/5/1',NULL,'001' UNION ALL
SELECT 'F','2017/8/1',NULL,'001'
GO
WITH CTE
AS
(SELECT CAST(A.number+1 AS VARCHAR)+'月' AS [MONTH],
SUM(CASE WHEN DATEADD(MONTH,NUMBER,'2017-01-01') BETWEEN START_DATE AND ISNULL(END_DATE,GETDATE()) THEN 1 ELSE 0 END) AS AMOUNT,
DEPART_ID
FROM master..spt_values A
JOIN #T B ON 1=1
WHERE TYPE='P'
AND number<=11
GROUP BY A.number+1,DEPART_ID
)
SELECT DEPART_ID,
[1月],[2月],[3月],[4月],[5月],[6月],[7月],[8月],[9月],[10月],[11月],[12月]
FROM CTE
PIVOT (SUM(AMOUNT) FOR MONTH IN([1月],[2月],[3月],[4月],[5月],[6月],[7月],[8月],[9月],[10月],[11月],[12月])) AS B
if OBJECT_ID(N'TEMPDB..#T') IS NOT NULL
drop table #T
GO
CREATE TABLE #T
(STAFF_ID VARCHAR(10),
START_DATE DATETIME,
END_DATE DATETIME)
INSERT INTO #T
SELECT 'C','2017/1/1','2017/1/31' UNION ALL
SELECT 'D','2017/3/1','2017/5/31' UNION ALL
SELECT 'E','2017/5/1',NULL UNION ALL
SELECT 'F','2017/8/1',NULL
GO
WITH CTE
AS
(SELECT CAST(A.number+1 AS VARCHAR)+'月' AS [MONTH],
SUM(CASE WHEN DATEADD(MONTH,NUMBER,'2017-01-01') BETWEEN START_DATE AND ISNULL(END_DATE,GETDATE()) THEN 1 ELSE 0 END) AS AMOUNT
FROM master..spt_values A
JOIN #T B ON 1=1
WHERE TYPE='P'
AND number<=11
GROUP BY A.number+1
)
SELECT * FROM CTE
PIVOT (SUM(AMOUNT) FOR MONTH IN([1月],[2月],[3月],[4月],[5月],[6月],[7月],[8月],[9月],[10月],[11月],[12月])) AS B