27,579
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE #a
(
col1 VARCHAR(100),
col2 VARCHAR(100),
col3 FLOAT
)
GO
INSERT INTO #a
SELECT 'A001','AAA',24.5 UNION ALL
SELECT 'A001','BBB',35 UNION ALL
SELECT 'A002','AAA',45.5 UNION ALL
SELECT 'A003','CCC',30 UNION ALL
SELECT 'A003','BBB',23 UNION ALL
SELECT 'A003','DDD',54
GO
SELECT * FROM #a
GO
SELECT 'A001','AAA',24.5,'BBB',35,NULL,NULL,59.5 UNION ALL
SELECT 'A002','AAA',45.5,NULL,NULL,NULL,NULL,45.5 UNION ALL
SELECT 'A003','CCC',30,'BBB',23,'DDD',54,107
---- ---- --------------------------------------- ---- ----------- ---- ----------- ---------------------------------------
A001 AAA 24.5 BBB 35 NULL NULL 59.5
A002 AAA 45.5 NULL NULL NULL NULL 45.5
A003 CCC 30.0 BBB 23 DDD 54 107.0
(3 行受影响)
CREATE TABLE #a
(
col1 VARCHAR(100),
col2 VARCHAR(100),
col3 FLOAT
)
GO
INSERT INTO #a
SELECT 'A001','AAA',24.5 UNION ALL
SELECT 'A001','BBB',35 UNION ALL
SELECT 'A002','AAA',45.5 UNION ALL
SELECT 'A003','CCC',30 UNION ALL
SELECT 'A003','BBB',23 UNION ALL
SELECT 'A003','DDD',54
GO
select row_number=row_number() over (partition by col1 order by col2),* into #b from #a order by col1,col2
declare @s nvarchar(4000)
set @s='select col1'
select @s=@s+','+quotename('col1'+ltrim(row_number))+'=max(case when row_number='+ltrim(row_number)+' then Col2 end) '
+','+quotename('col2'+ltrim(row_number))+'=max(case when row_number='+ltrim(row_number)+' then Col3 end) '
from #b group by row_number order by row_number
print @s
EXEC(@s+',sum(col3) as sumCol3 from #b group by col1')
CREATE TABLE #a
(
col1 VARCHAR(100),
col2 VARCHAR(100),
col3 FLOAT
)
GO
INSERT INTO #a
SELECT 'A001','AAA',24.5 UNION ALL
SELECT 'A001','BBB',35 UNION ALL
SELECT 'A002','AAA',45.5 UNION ALL
SELECT 'A003','CCC',30 UNION ALL
SELECT 'A003','BBB',23 UNION ALL
SELECT 'A003','DDD',54
GO
SELECT * FROM #a
GO
DECLARE @s VARCHAR(MAX)
SELECT @s=ISNULL(@s+',','Select col1,')
+' MAX(CASE rn WHEN '+LTRIM(rn)+' THEN col2 END) ['+LTRIM(rn)+'a]'
+',SUM(CASE rn WHEN '+LTRIM(rn)+' THEN col3 END) ['+LTRIM(rn)+'b]'
FROM (SELECT DISTINCT rn=ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY GETDATE()) FROM #a) t
SET @s=@s+',SUM(col3) sumall FROM (
SELECT rn=ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY GETDATE()),*
FROM #a) AS T GROUP BY col1'
EXEC(@s)
/*
col1 1a 1b 2a 2b 3a 3b sumall
A001 AAA 24.5 BBB 35 NULL NULL 59.5
A002 AAA 45.5 NULL NULL NULL NULL 45.5
A003 CCC 30 BBB 23 DDD 54 107
CCC 30 BBB 23 DDD 54 107
(3 行受影响)
*/
declare @s nvarchar(4000)
set @s='select col1'
select @s=@s+','+quotename(Col2)+'=sum(case when Col2='+quotename(Col2,'''')+' then Col3 end)' from #a group by Col2 order by Col2
EXEC(@s+',sum(col3) as sumCol3 from #a group by col1')
查询最后一列
SELECT COL1,SUM(COL3) FROM #A GROUP BY COL1
CREATE TABLE #a
(
col1 VARCHAR(100),
col2 VARCHAR(100),
col3 FLOAT
)
GO
INSERT INTO #a
SELECT 'A001','AAA',24.5 UNION ALL
SELECT 'A001','BBB',35 UNION ALL
SELECT 'A002','AAA',45.5 UNION ALL
SELECT 'A003','CCC',30 UNION ALL
SELECT 'A003','BBB',23 UNION ALL
SELECT 'A003','DDD',54
GO
declare @s nvarchar(4000)
set @s='select col1'
select @s=@s+','+quotename(Col2)+'=max(case when Col2='+quotename(Col2,'''')+' then Col3 end)' from #a group by Col2 order by Col2
EXEC(@s+',sum(col3) as sumCol3 from #a group by col1')
/*
col1 AAA BBB CCC DDD sumCol3
A001 24.5 35 NULL NULL 59.5
A002 45.5 NULL NULL NULL 45.5
A003 NULL 23 30 54 107
*/