- /***************************************
- 【脚本功能】
- (1)去除内容重复的记录,并合并某一级别的业务数据;
- (2)对查重合并后的数据集执行数据透视操作。
- 【数据源】表名:T1
- ID Owner Resource OrderID Quotation
- ------------------------------------
- 1 Jack China 363 45
- 2 Jack China 363 45
- 3 Mike Japan 678 23
- 4 Mike Japan 678 23
- 5 Mike Japan 678 23
- 6 John China 893 12
- 7 John Korea 453 11
- 8 Mike China 234 78
- 9 Jack China 676 33
- ****************************************/
- --SELECT * FROM T1
- --GO
- --查重:删除内容(ID除外)重复的代码
- SELECT Owner,Resource,SUM(Quotation) AS Total
- FROM T1
- WHERE ID IN
- (
- SELECT ID=MIN(ID)FROM T1
- GROUP BY Owner,Resource,OrderID,Quotation
- )
- GROUP BY Owner,Resource
- ORDER BY Owner,Resource
- GO
- /*
- 脚本:对查重合并结果集执行数据透视
- */
- DECLARE @sql nvarchar(1024)
- DECLARE @tbTitle nvarchar(256); --透视表的数据分类字段集
- --SET @tbTitle = '[China],[Korea],[Japan]'
- SET @tbTitle=''
- SELECT @tbTitle=@tbTitle+Resource +',' -- 动态获取透视表分类字段集
- FROM
- (SELECT DISTINCT Resource FROM T1) AS R
- IF @tbTitle <>''
- BEGIN
- SET @tbTitle=LEFT(@tbTitle,LEN(@tbTitle)-1) --删除最右边的字段名分隔号
- SET @sql=
- '
- SELECT OWNER AS 客户, '+@tbTitle +
- '
- FROM
- (
- SELECT Owner,Resource,SUM(Quotation) AS Total
- FROM T1
- WHERE ID IN(
- SELECT ID=MIN(ID)FROM T1
- GROUP BY Owner,Resource,OrderID,Quotation
- )
- GROUP BY Owner,Resource
- ) AS P
- PIVOT
- (
- SUM (Total)
- FOR Resource IN('+@tbTitle+')
- ) AS PVT
- ORDER BY Owner;
- '
- EXEC sp_executesql @sql
- END
- GO
- /*
- 数据透视的官方范例
- USE AdventureWorks2008
- GO
- SELECT VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS Emp3, [231] AS Emp4, [233] AS Emp5
- FROM
- (SELECT PurchaseOrderID, EmployeeID, VendorID
- FROM Purchasing.PurchaseOrderHeader) AS p
- PIVOT
- (
- COUNT (PurchaseOrderID)
- FOR EmployeeID IN
- ( [164], [198], [223], [231], [233] )
- ) AS pvt
- ORDER BY VendorID;
- */
T-SQL 查重合并数据并实现动态数据透视
最新推荐文章于 2025-08-09 23:26:39 发布