这种数据如何查出来,而且要不影响速度
这种数据怎么查出来,而且要不影响速度
假如说我有这样一张表(A)和数据
表A:
ID 字段1 字段2 字段3 字段4
1 A B C1 D
2 A B C2 D
3 A B C3 D
4 A B C4 D
5 A F C5 D
6 A F C6 D
查询出来的结果是这样,请问该如何实现,又不影响速度
字段1 字段2
A B C1 C2 C3 C4 D
A F C5 C6 D
------解决方案--------------------
這樣嗎?
假如说我有这样一张表(A)和数据
表A:
ID 字段1 字段2 字段3 字段4
1 A B C1 D
2 A B C2 D
3 A B C3 D
4 A B C4 D
5 A F C5 D
6 A F C6 D
查询出来的结果是这样,请问该如何实现,又不影响速度
字段1 字段2
A B C1 C2 C3 C4 D
A F C5 C6 D
sql
------解决方案--------------------
這樣嗎?
USE test
GO
-->生成表tb
if object_id('tb') is not null
drop table tb
Go
Create table tb([ID] smallint,[字段1] nvarchar(1),[字段2] nvarchar(1),[字段3] nvarchar(2),[字段4] nvarchar(1))
Insert into tb
Select 1,N'A',N'B',N'C1',N'D'
Union all Select 2,N'A',N'B',N'C2',N'D'
Union all Select 3,N'A',N'B',N'C3',N'D'
Union all Select 4,N'A',N'B',N'C4',N'D'
Union all Select 5,N'A',N'F',N'C5',N'D'
Union all Select 6,N'A',N'F',N'C6',N'D'
DECLARE @sql NVARCHAR(MAX)
SELECT
@sql=ISNULL(@sql+',','')+'Max(Case when col=''col'+LTRIM(row)+''' Then [字段3] Else '''' End) As [col'+LTRIM(row)+']'
FROM (
SELECT ROW_NUMBER()OVER(PARTITION BY [字段1],[字段2] ORDER BY [字段3]) AS row FROM tb
)AS t
GROUP BY row
EXEC ('
;WITH t AS(
SELECT
*
,''col''+Ltrim(Row_number()over(partition by [字段1],[字段2] ORDER BY [字段3])) As col
FROM tb
)
Select
[字段1]
,[字段2]
,'+@sql+'
,[字段4]
From t
Group by [字段1],[字段2],[字段4]
')
/*
字段1 字段2 col1 col2 col3 col4 字段4
---- ---- ---- ---- ---- ---- ----
A B C1 C2 C3 C4 D
A F C5 C6 D
*/