34,594
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE test (车型 VARCHAR(10), 年份 VARCHAR(10),月份 VARCHAR(10),数量 INT )
INSERT INTO test
SELECT 'suv', '2003', '6月', 0
UNION ALL
SELECT 'suv', '2003', '7月', 1
UNION ALL
SELECT 'suv', '2003', '8月', 0
UNION ALL
SELECT 'suv', '2003', '9月', 3
UNION ALL
SELECT 'suv', '2003', '10月', 0
UNION ALL
SELECT 'suv', '2003', '11月', 1
UNION ALL
SELECT 'suv', '2003', '12月', 2
UNION ALL
SELECT 'ft', '2003', '6月', 1
UNION ALL
SELECT 'ft', '2003', '7月', 0
UNION ALL
SELECT 'ft', '2003', '8月', 0
UNION ALL
SELECT 'ft', '2003', '9月', 1
UNION ALL
SELECT 'ft', '2003', '10月', 2
UNION ALL
SELECT 'ft', '2003', '11月', 3
UNION ALL
SELECT 'ft', '2003', '12月', 0
UNION ALL
SELECT 'asd', '2004','1月', 2
UNION ALL
SELECT 'asd', '2004', '2月', 1
UNION ALL
SELECT 'asd', '2004', '3月', 0
SELECT 车型,SUBSTRING(年份+CASE WHEN LEN(SUBSTRING(月份,1,CHARINDEX('月',月份,1)))=2 THEN '0'+月份 ELSE 月份 END,
1,LEN(年份+CASE WHEN LEN(SUBSTRING(月份,1,CHARINDEX('月',月份,1)))=2 THEN '0'+月份 ELSE 月份 END)-1) 月份,数量 INTO #t
FROM test
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename(SUBSTRING(月份,5,2)+'月')+'=max(case when [月份]='+quotename(月份,'''')+' then [数量] else 0 end)'
from #t WHERE 月份 BETWEEN '200308' AND '200402' group BY 月份
exec('select [车型]'+@s+' from #t group by [车型]')
/*
车型 08月 09月 10月 11月 12月 01月 02月
---------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
asd 0 0 0 0 0 2 1
ft 0 1 2 3 0 0 0
suv 0 3 0 1 2 0 0
(3 行受影响)
*/
CREATE TABLE test (车型 VARCHAR(10), 年份 VARCHAR(10),月份 VARCHAR(10),数量 INT )
INSERT INTO test
SELECT 'suv', '2003', '6月', 0
UNION ALL
SELECT 'suv', '2003', '7月', 1
UNION ALL
SELECT 'suv', '2003', '8月', 0
UNION ALL
SELECT 'suv', '2003', '9月', 3
UNION ALL
SELECT 'suv', '2003', '10月', 0
UNION ALL
SELECT 'suv', '2003', '11月', 1
UNION ALL
SELECT 'suv', '2003', '12月', 2
UNION ALL
SELECT 'ft', '2003', '6月', 1
UNION ALL
SELECT 'ft', '2003', '7月', 0
UNION ALL
SELECT 'ft', '2003', '8月', 0
UNION ALL
SELECT 'ft', '2003', '9月', 1
UNION ALL
SELECT 'ft', '2003', '10月', 2
UNION ALL
SELECT 'ft', '2003', '11月', 3
UNION ALL
SELECT 'ft', '2003', '12月', 0
UNION ALL
SELECT 'asd', '2004','1月', 2
UNION ALL
SELECT 'asd', '2004', '2月', 1
UNION ALL
SELECT 'asd', '2004', '3月', 0
SELECT 车型,SUBSTRING(年份+CASE WHEN LEN(SUBSTRING(月份,1,CHARINDEX('月',月份,1)))=2 THEN '0'+月份 ELSE 月份 END,
1,LEN(年份+CASE WHEN LEN(SUBSTRING(月份,1,CHARINDEX('月',月份,1)))=2 THEN '0'+月份 ELSE 月份 END)-1) 月份,数量 INTO #t
FROM test
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename(SUBSTRING(月份,5,2))+'=max(case when [月份]='+quotename(月份,'''')+' then [数量] else 0 end)'
from #t WHERE 月份 BETWEEN '200308' AND '200402' group BY 月份
exec('select [车型]'+@s+' from #t group by [车型]')
/*
车型 08 09 10 11 12 01 02
---------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
asd 0 0 0 0 0 2 1
ft 0 1 2 3 0 0 0
suv 0 3 0 1 2 0 0
(3 行受影响)
*/
车型 年份 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月
---- ---- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
ft 2003 1 0 0 1 2 3 0 NULL NULL NULL
suv 2003 0 1 0 3 0 1 2 NULL NULL NULL
asd 2004 NULL NULL NULL NULL NULL NULL NULL 2 1 0
(3 行受影响)
;with tab(车型, 年份, 月份, 数量)
as(
select 'suv', '2003', '6月', 0
union select 'suv', '2003', '7月', 1
union select 'suv', '2003', '8月', 0
union select 'suv', '2003', '9月', 3
union select 'suv', '2003','10月', 0
union select 'suv', '2003', '11月', 1
union select 'suv', '2003', '12月', 2
union select 'ft', '2003', '6月', 1
union select 'ft', '2003', '7月', 0
union select 'ft', '2003', '8月',0
union select 'ft', '2003', '9月', 1
union select 'ft', '2003', '10月', 2
union select 'ft', '2003', '11月', 3
union select 'ft', '2003', '12月', 0
union select 'asd', '2004', '1月', 2
union select 'asd', '2004','2月', 1
union select 'asd', '2004', '3月', 0
)
select *
from tab
PIVOT ( sum(数量) FOR [月份] IN ([6月], [7月], [8月], [9月], [10月] ,[11月] ,[12月], [1月], [2月], [3月]))a
SELECT 车型,年份,[6月] AS '6月',[7月] AS '7月',[8月] AS '8月' FROM (
SELECT * FROM TABLE01 WHERE (年份+月份>='20036' AND 年份+月份<='20043')
) T
PIVOT (SUM([数量]) FOR [月份] IN ([6月],[7月],[8月])) AS PIV
ORDER BY [车型]