T-SQL 查重合并数据并实现动态数据透视

本文介绍了一种使用SQL去除重复记录并合并业务数据的方法,并通过数据透视操作实现数据的进一步分析。具体包括如何利用SQL查询来筛选并汇总重复的数据,以及如何构建动态的数据透视表来展示不同资源的总额。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. /***************************************
  2. 【脚本功能】
  3. (1)去除内容重复的记录,并合并某一级别的业务数据;
  4. (2)对查重合并后的数据集执行数据透视操作。
  5. 【数据源】表名:T1
  6. ID  Owner Resource OrderID Quotation
  7. ------------------------------------
  8. 1   Jack    China   363 45
  9. 2   Jack    China   363 45
  10. 3   Mike    Japan   678 23
  11. 4   Mike    Japan   678 23
  12. 5   Mike    Japan   678 23
  13. 6   John    China   893 12
  14. 7   John    Korea   453 11
  15. 8   Mike    China   234 78
  16. 9   Jack    China   676 33
  17. ****************************************/
  18. --SELECT * FROM T1
  19. --GO


  20. --查重:删除内容(ID除外)重复的代码
  21. SELECT Owner,Resource,SUM(Quotation) AS Total
  22. FROM T1
  23. WHERE ID IN
  24. (
  25. SELECT ID=MIN(ID)FROM T1
  26. GROUP BY Owner,Resource,OrderID,Quotation
  27. )
  28. GROUP BY Owner,Resource
  29. ORDER BY Owner,Resource
  30. GO

  31. /*
  32. 脚本:对查重合并结果集执行数据透视
  33. */
  34. DECLARE @sql nvarchar(1024)
  35. DECLARE @tbTitle nvarchar(256); --透视表的数据分类字段集
  36. --SET @tbTitle  = '[China],[Korea],[Japan]'
  37. SET @tbTitle=''
  38. SELECT @tbTitle=@tbTitle+Resource +','  -- 动态获取透视表分类字段集
  39. FROM
  40. (SELECT DISTINCT Resource FROM T1) AS R

  41. IF @tbTitle <>''
  42. BEGIN
  43.     SET @tbTitle=LEFT(@tbTitle,LEN(@tbTitle)-1) --删除最右边的字段名分隔号
  44.     SET @sql=
  45.     '
  46.     SELECT OWNER AS 客户, '+@tbTitle +
  47.     '
  48.     FROM 
  49.     (
  50.     SELECT Owner,Resource,SUM(Quotation) AS Total
  51.     FROM T1
  52.     WHERE ID IN(
  53.         SELECT ID=MIN(ID)FROM T1
  54.         GROUP BY Owner,Resource,OrderID,Quotation
  55.         )
  56.     GROUP BY Owner,Resource
  57.     ) AS P
  58.     PIVOT
  59.     (
  60.         SUM (Total)
  61.         FOR Resource IN('+@tbTitle+')
  62.     ) AS PVT
  63.     ORDER BY Owner;
  64.     '
  65.     EXEC sp_executesql @sql
  66.     
  67. END
  68. GO

  69. /*
  70. 数据透视的官方范例
  71. USE AdventureWorks2008
  72. GO
  73. SELECT VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS Emp3, [231] AS Emp4, [233] AS Emp5
  74. FROM 
  75. (SELECT PurchaseOrderID, EmployeeID, VendorID
  76. FROM Purchasing.PurchaseOrderHeader) AS p
  77. PIVOT
  78. (
  79. COUNT (PurchaseOrderID)
  80. FOR EmployeeID IN
  81. ( [164], [198], [223], [231], [233] )
  82. ) AS pvt
  83. ORDER BY VendorID;
  84. */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值