zoukankan      html  css  js  c++  java
  • MSSQL 2005 列转行应用案例

    1. /*MSSQL 2005 列转行应用案例 By claro(陈亮) 2008-12-2 转载请包含此信息*/
    2. --test table KuCunMX
    3. If object_id ('KuCunMX') is not NULL
    4.     Drop Table KuCunMX
    5. else
    6.     Create Table KuCunMX (ShangPinBH varchar(20),ShiJian datetime,KuWeiBH varchar(20),ShuLiang int)
    7. Go
    8. --新建库存表并插入数据
    9. Insert Into KuCunMX 
    10. Select '0000000000001',getdate(),'A999990000',1 Union All
    11. Select '0000000000002',getdate(),'A999990000',2 Union All
    12. Select '0000000000003',getdate(),'A999990000',3 Union All
    13. Select '0000000000004',getdate(),'A999990000',4 Union All
    14. Select '0000000000005',getdate(),'A999990000',5 Union All
    15. Select '0000000000006',getdate(),'E050000000',6 Union All
    16. Select '0000000000007',getdate(),'E050000000',7 Union All
    17. Select '0000000000008',getdate(),'E050000000',8 Union All
    18. Select '0000000000009',getdate(),'E050000000',9 Union All
    19. Select '0000000000010',getdate(),'E050000000',10 
    20. --Select * From KuCunMX
    21. /*ShangPinBH    ShiJian                 KuWeiBH     ShuLiang
    22. 0000000000001   2008-12-02 23:42:11.543 A999990000  1
    23. 0000000000002   2008-12-02 23:42:11.543 A999990000  2
    24. 0000000000003   2008-12-02 23:42:11.543 A999990000  3
    25. 0000000000004   2008-12-02 23:42:11.543 A999990000  4
    26. 0000000000005   2008-12-02 23:42:11.543 A999990000  5
    27. 0000000000006   2008-12-02 23:42:11.543 E050000000  6
    28. 0000000000007   2008-12-02 23:42:11.543 E050000000  7
    29. 0000000000008   2008-12-02 23:42:11.543 E050000000  8
    30. 0000000000009   2008-12-02 23:42:11.543 E050000000  9
    31. 0000000000010   2008-12-02 23:42:11.543 E050000000  10
    32. */
    33. --预订储位的库存信息列转行
    34. Select ShangPinBH,ISNULL(A999990000,0) A999990000,ISNULL(E050000000,0) E050000000
    35.  from (Select ShangPinBH,KuWeiBH,ShuLiang from KuCunMX ) a pivot (max(ShuLiang) for KuWeiBH
    36.  in (A999990000,E050000000)) b
    37. /*
    38. ShangPinBH  A999990000  E050000000
    39. 0000000000001   1   0
    40. 0000000000002   2   0
    41. 0000000000003   3   0
    42. 0000000000004   4   0
    43. 0000000000005   5   0
    44. 0000000000006   0   6
    45. 0000000000007   0   7
    46. 0000000000008   0   8
    47. 0000000000009   0   9
    48. 0000000000010   0   10
    49. */
    50. --test table ShangPin
    51. If object_id('ShangPin') is not NULL
    52.     Drop Table ShangPin
    53. Else
    54. Create table ShangPin (ShangPinBH varchar(20),ShiJian datetime,ShangPinMC varchar(20),ISBN varchar(20),DingJia float)
    55. Go
    56. --新建商品表并插入数据
    57. Insert into ShangPin
    58. Select '0000000000001',getdate(),'SQL2000入门经典','7-1111-1111-1',10 Union All
    59. Select '0000000000002',getdate(),'SQL2005入门经典','7-1111-1111-2',20 Union All
    60. Select '0000000000003',getdate(),'SQL2008入门经典','7-1111-1111-3',30 Union All
    61. Select '0000000000004',getdate(),'OFFICE97入门经典','7-1111-1111-4',40 Union All
    62. Select '0000000000005',getdate(),'OFFICE2000入门经典','7-1111-1111-5',50 Union All
    63. Select '0000000000006',getdate(),'OFFICE2003入门经典','7-1111-1111-6',60 Union All
    64. Select '0000000000007',getdate(),'OFFICE2007入门经典','7-1111-1111-7',70 Union All
    65. Select '0000000000008',getdate(),'C#.NET入门经典','7-1111-1111-8',70 Union All
    66. Select '0000000000009',getdate(),'Java入门经典','7-1111-1111-9',90 Union All
    67. Select '0000000000010',getdate(),'正则表达式必知必会','7-1111-1111-0',100 
    68. --select * from shangpin
    69. /*
    70. ShangPinBH      ShiJian                 ShangPinMC          ISBN            DingJia
    71. 0000000000001   2008-12-02 23:47:30.107 SQL2000入门经典     7-1111-1111-1   10
    72. 0000000000002   2008-12-02 23:47:30.107 SQL2005入门经典     7-1111-1111-2   20
    73. 0000000000003   2008-12-02 23:47:30.107 SQL2008入门经典     7-1111-1111-3   30
    74. 0000000000004   2008-12-02 23:47:30.107 OFFICE97入门经典    7-1111-1111-4   40
    75. 0000000000005   2008-12-02 23:47:30.107 OFFICE2000入门经典  7-1111-1111-5   50
    76. 0000000000006   2008-12-02 23:47:30.107 OFFICE2003入门经典  7-1111-1111-6   60
    77. 0000000000007   2008-12-02 23:47:30.107 OFFICE2007入门经典  7-1111-1111-7   70
    78. 0000000000008   2008-12-02 23:47:30.107 C#.NET入门经典      7-1111-1111-8   70
    79. 0000000000009   2008-12-02 23:47:30.107 Java入门经典        7-1111-1111-9   90
    80. 0000000000010   2008-12-02 23:47:30.107 正则表达式必知必会   7-1111-1111-0   100
    81. */
    82. --(行列转换)显示预订储位的库存信息和商品信息
    83. Select sp.ShangPinBH,sp.ShangPinMC,mx11.特殊储位A999990000,mx11.特殊储位E050000000
    84. from ShangPin sp
    85. INNER JOIN (Select ShangPinBH,ISNULL(A999990000,0) 特殊储位A999990000,ISNULL(E050000000,0) 特殊储位E050000000
    86.  from (Select ShangPinBH,KuWeiBH,ShuLiang from KuCunMX ) a pivot (max(ShuLiang) For KuWeiBH in (A999990000,E050000000)) b) mx11
    87.      on sp.ShangPinBH=mx11.ShangPinBH
    88. /*
    89. ShangPinBH      ShangPinMC          特殊储位A999990000  特殊储位E050000000
    90. 0000000000001   SQL2000入门经典     1   0
    91. 0000000000002   SQL2005入门经典     2   0
    92. 0000000000003   SQL2008入门经典     3   0
    93. 0000000000004   OFFICE97入门经典    4   0
    94. 0000000000005   OFFICE2000入门经典  5   0
    95. 0000000000006   OFFICE2003入门经典  0   6
    96. 0000000000007   OFFICE2007入门经典  0   7
    97. 0000000000008   C#.NET入门经典      0   8
    98. 0000000000009   Java入门经典        0   9
    99. 0000000000010   正则表达式必知必会   0   10
    100. */
    101. --END--go sleeping
    102. --test table JinHuoD
    103. If object_id ('JinHuoD') is not NULL
    104.     Drop Table JinHuoD
    105. else
    106.     Create Table JinHuoD (JinHuoDBH varchar(20),ShiJian datetime,caozuoy varchar(20))
    107. Go
    108. --新建进货单表并插入数据
    109. Insert Into JinHuoD 
    110. Select 'JH2008120300001',getdate(),'admin' Union All
    111. Select 'JH2008120200002',getdate()-1,'admin' Union All
    112. Select 'JH2008120100003',getdate()-2,'admin'
    113. --select * from JinHuoD
    114. /*
    115. JinHuoDBH       ShiJian                 caozuoy
    116. JH2008120300001 2008-12-03 10:23:57.513 admin
    117. JH2008120200002 2008-12-02 10:23:57.513 admin
    118. JH2008120100003 2008-12-01 10:23:57.513 admin
    119. */
    120. --test table JinHuoDMX
    121. If object_id ('JinHuoDMX') is not NULL
    122.     Drop Table JinHuoDMX
    123. else
    124.     Create Table JinHuoDMX (JinHuoDBH varchar(20),JinHuoDMXBH varchar(40),ShangPinBH varchar(20),FuHeSL int)
    125. Go
    126. --新建进货单明细表并插入数据
    127. Insert Into JinHuoDMX 
    128. Select 'JH2008120300001','JH200812030000101','0000000000001',1 Union All
    129. Select 'JH2008120300001','JH200812030000102','0000000000002',2 Union All
    130. Select 'JH2008120300001','JH200812030000103','0000000000005',12 Union All
    131. Select 'JH2008120300001','JH200812030000104','0000000000004',4 Union All
    132. Select 'JH2008120300001','JH200812030000105','0000000000005',5 Union All
    133. Select 'JH2008120300001','JH200812030000106','0000000000006',6 Union All
    134. Select 'JH2008120300001','JH200812030000108','0000000000008',8 Union All
    135. Select 'JH2008120300001','JH200812030000109','0000000000008',11 Union All
    136. Select 'JH2008120300001','JH200812030000110','0000000000010',10 Union All
    137. Select 'JH2008120200002','JH200812020000201','0000000000003',1 Union All
    138. Select 'JH2008120200002','JH200812020000202','0000000000001',2 Union All
    139. Select 'JH2008120100003','JH200812010000301','0000000000009',111
    140. --select * from JinHuoDMX
    141. /*
    142. JinHuoDBH       JinHuoDMXBH         ShangPinBH      FuHeSL
    143. JH2008120300001 JH200812030000101   0000000000001   1
    144. JH2008120300001 JH200812030000102   0000000000002   2
    145. JH2008120300001 JH200812030000103   0000000000005   12
    146. JH2008120300001 JH200812030000104   0000000000004   4
    147. JH2008120300001 JH200812030000105   0000000000005   5
    148. JH2008120300001 JH200812030000106   0000000000006   6
    149. JH2008120300001 JH200812030000108   0000000000008   8
    150. JH2008120300001 JH200812030000109   0000000000008   11
    151. JH2008120300001 JH200812030000110   0000000000010   10
    152. JH2008120200002 JH200812020000201   0000000000003   1
    153. JH2008120200002 JH200812020000202   0000000000001   2
    154. JH2008120100003 JH200812010000301   0000000000009   111
    155. */
    156. --显示预订储位的库存信息,显示第一次进货时间
    157. Select sp.ShangPinBH,sp.ShangPinMC,mx11.特殊储位A999990000,mx11.特殊储位E050000000,
    158.         ISNULL(CONVERT(VARCHAR(100),ys1.DaoHuoRQ,23),'无进货史') 第一次进货日期
    159. from ShangPin sp
    160. INNER JOIN (Select ShangPinBH,ISNULL(A999990000,0) 特殊储位A999990000,ISNULL(E050000000,0) 特殊储位E050000000
    161.             from (Select ShangPinBH,KuWeiBH,ShuLiang from KuCunMX ) a pivot (max(ShuLiang)
    162.              For KuWeiBH in (A999990000,E050000000)) b) mx11
    163.      on sp.ShangPinBH=mx11.ShangPinBH
    164. LeFT JOIN (Select mx21.ShangPinBH,MIN(ys.ShiJian) DaoHuoRQ
    165.             from JinHuoD ys
    166.             INNER JOIN JinHuoDMX mx21 on mx21.JinHuoDBH=ys.JinHuoDBH
    167.             Group By mx21.ShangPinBH) ys1
    168.      on ys1.ShangPinBH=sp.ShangPinBH
    169. /*
    170. ShangPinBH      ShangPinMC          特殊储位A999990000  特殊储位E050000000  第一次进货日期
    171. 0000000000001   SQL2000入门经典     1                   0                   2008-12-02
    172. 0000000000002   SQL2005入门经典     2                   0                   2008-12-03
    173. 0000000000003   SQL2008入门经典     3                   0                   2008-12-02
    174. 0000000000004   OFFICE97入门经典    4                   0                   2008-12-03
    175. 0000000000005   OFFICE2000入门经典  5                   0                   2008-12-03
    176. 0000000000006   OFFICE2003入门经典  0                   6                   2008-12-03
    177. 0000000000007   OFFICE2007入门经典  0                   7                   无进货史
    178. 0000000000008   C#.NET入门经典      0                   8                   2008-12-03
    179. 0000000000009   Java入门经典        0                   9                   2008-12-01
    180. 0000000000010   正则表达式必知必会   0                   10                  2008-12-03
    181. */
    182. --显示预订储位的库存信息和商品信息以及第一次进货时间和累计进货数量
    183. Select sp.ShangPinBH,sp.ShangPinMC,mx11.特殊储位A999990000,mx11.特殊储位E050000000,
    184.         ISNULL(CONVERT(VARCHAR(100),ys1.DaoHuoRQ,23),'无进货史') 第一次进货日期,
    185.         ISNULL(ys2.yanshoul,0) 累计进货数量
    186. from ShangPin sp
    187. INNER JOIN (Select ShangPinBH,ISNULL(A999990000,0) 特殊储位A999990000,ISNULL(E050000000,0) 特殊储位E050000000
    188.             from (Select ShangPinBH,KuWeiBH,ShuLiang from KuCunMX ) a pivot (max(ShuLiang)
    189.              For KuWeiBH in (A999990000,E050000000)) b) mx11
    190.      on sp.ShangPinBH=mx11.ShangPinBH
    191. LeFT JOIN (Select mx21.ShangPinBH,MIN(ys.ShiJian) DaoHuoRQ
    192.             from JinHuoD ys
    193.             INNER JOIN JinHuoDMX mx21 on mx21.JinHuoDBH=ys.JinHuoDBH
    194.             Group By mx21.ShangPinBH) ys1
    195.      on ys1.ShangPinBH=sp.ShangPinBH
    196. LeFT JOIN (Select mx31.ShangPinBH,SUM(mx31.FuHeSL) yanshoul
    197.             from JinHuoDMX mx31
    198.             INNER JOIN JinHuoD ys on mx31.JinHuoDBH=ys.JinHuoDBH
    199.             Group By mx31.ShangPinBH) ys2
    200.      on ys2.ShangPinBH=sp.ShangPinBH 
    201. /*
    202. ShangPinBH      ShangPinMC          特殊储位A999990000  特殊储位E050000000  第一次进货日期 累计进货数量
    203. 0000000000001   SQL2000入门经典     1                   0                   2008-12-02      3
    204. 0000000000002   SQL2005入门经典     2                   0                   2008-12-03      2
    205. 0000000000003   SQL2008入门经典     3                   0                   2008-12-02      1
    206. 0000000000004   OFFICE97入门经典    4                   0                   2008-12-03      4
    207. 0000000000005   OFFICE2000入门经典  5                   0                   2008-12-03      17
    208. 0000000000006   OFFICE2003入门经典  0                   6                   2008-12-03      6
    209. 0000000000007   OFFICE2007入门经典  0                   7                   无进货史        0
    210. 0000000000008   C#.NET入门经典      0                   8                   2008-12-03      19
    211. 0000000000009   Java入门经典        0                   9                   2008-12-01      111
    212. 0000000000010   正则表达式必知必会   0                   10                  2008-12-03      10
    213. */
    214. --END
  • 相关阅读:
    LibreOJ 6003. 「网络流 24 题」魔术球 贪心或者最小路径覆盖
    LibreOJ #6002. 「网络流 24 题」最小路径覆盖
    LibreOJ #6000. 「网络流 24 题」搭配飞行员 最大匹配
    LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配
    hdu 1011 Starship Troopers 树形背包dp
    Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland dfs
    hdu 6199 gems gems gems dp
    hdu 5212 Code 筛法或者莫比乌斯
    hdu 3208 Integer’s Power 筛法
    hdu 5120 Intersection 两个圆的面积交
  • 原文地址:https://www.cnblogs.com/accumulater/p/6101152.html
Copyright © 2011-2022 走看看