PIVOT рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ SQL рд╕рд░реНрд╡рд░
рд▓реЗрдЦрдХ
рдкрд┐рдЫрд▓реЗ I рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ UNPIVOT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдпрд╣ рд╡рд┐рдкрд░реАрдд рдХрд╛рд░реНрдп PIVOT рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛, рдореИрдВрдиреЗ рдХреБрдЫ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рдХрд▓реНрдк рджреЗрдЧрд╛ рд╕рд╛рдеред
Dummy data
MyRow | MyCol | CalcCol |
1 | 1 | 1 |
1 | 3 | 1 |
1 | s | 1 |
2 | 2 | 1 |
2 | 2 | 6 |
2 | 3 | 1 |
3 | 2 | 1 |
3 | 3 | 1 |
3 | 3 | 3 |
3 | 5 | 5 |
рд▓реЗрдЦрдХ
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рдбрдореА рдбреЗрдЯрд╛ рд╕реЗрдЯ рдмрдирд╛рдирд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рдо рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХреЗрдВред
рд╣рдо рдПрдХ рдЯреЗрдмрд▓ рдЯрд╛рдЗрдк рднреА рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ (рдпреЗ рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
SQL
CREATE TYPE c1bs_Piv AS TABLE(MyRow NVARCHAR(10),--Row IDMyCol NVARCHAR(10),--Value to become columnCalcCol INT--Value to be Summed)GODECLARE @Piv c1bs_PivINSERT INTO @PivSELECT '1','1',1 UNIONSELECT '1','s',1 UNIONSELECT '1','3',1 UNIONSELECT '2','2',6 UNIONSELECT '2','2',1 UNIONSELECT '2','3',1 UNIONSELECT '3','5',5 UNIONSELECT '3','2',1 UNIONSELECT '3','3',1 UNIONSELECT '3','3',3
рд▓реЗрдЦрдХ
SELECT *FROM @PivPIVOT (SUM(CalcCol)FOR MyColIN ([1],[2],[3])) AS MyTable
рд▓реЗрдЦрдХ
рдФрд░ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдКрдкрд░ "5" рдФрд░ "рдПрд╕" рдХреЙрд▓рдо рдЬреЛрдбрд╝реЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВред
MyRow | 1 | 2 | 3 |
1 | 1 | NULL | 1 |
2 | NULL | 7 | 1 |
3 | NULL | 1 | 4 |