站在浪尖看红尘 發表於 2023-8-21 00:00:00

sql语句实现行转列的3种方法实例

<p>
        <span><strong>前言</strong></span></p>
<p>
        一般在做数据统计的时候会用到行转列,假如要统计学生的成绩,数据库里查询出来的会是这样的,但这并不能达到想要的效果,所以要在查询的时候做一下处理,下面话不多说了,来一起看看详细的介绍。</p>
<p>
        <img title="sql语句实现行转列的3种方法实例" alt="sql语句实现行转列的3种方法实例" src="https://zhuji.jb51.net/uploads/img/202305/c9581e9d4a710658ae6b40da0ded976e.jpg">         </p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_430082">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql keyword">create</code> <code class="sql keyword">table</code> <code class="sql plain">testtable(</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql plain"> [</code><code class="sql keyword">int</code><code class="sql plain">] identity(1,1) </code><code class="sql color1">not</code> <code class="sql color1">null</code><code class="sql plain">,</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql plain"> (50) </code><code class="sql color1">null</code><code class="sql plain">,</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql plain"> (50) </code><code class="sql color1">null</code><code class="sql plain">,</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql plain"> [</code><code class="sql keyword">numeric</code><code class="sql plain">](18, 0) </code><code class="sql color1">null</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="sql plain">) </code><code class="sql keyword">on</code> <code class="sql plain">[</code><code class="sql keyword">primary</code><code class="sql plain">]</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="sql plain">go</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="sql keyword">insert</code> <code class="sql keyword">into</code> <code class="sql plain">testtable (,,) </code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">select</code> <code class="sql plain">n</code><code class="sql string">'张三'</code><code class="sql plain">,n</code><code class="sql string">'语文'</code><code class="sql plain">,60 </code><code class="sql keyword">union</code> <code class="sql color1">all</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">select</code> <code class="sql plain">n</code><code class="sql string">'李四'</code><code class="sql plain">,n</code><code class="sql string">'数学'</code><code class="sql plain">,70 </code><code class="sql keyword">union</code> <code class="sql color1">all</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">select</code> <code class="sql plain">n</code><code class="sql string">'王五'</code><code class="sql plain">,n</code><code class="sql string">'英语'</code><code class="sql plain">,80 </code><code class="sql keyword">union</code> <code class="sql color1">all</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">select</code> <code class="sql plain">n</code><code class="sql string">'王五'</code><code class="sql plain">,n</code><code class="sql string">'数学'</code><code class="sql plain">,75 </code><code class="sql keyword">union</code> <code class="sql color1">all</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">select</code> <code class="sql plain">n</code><code class="sql string">'王五'</code><code class="sql plain">,n</code><code class="sql string">'语文'</code><code class="sql plain">,57 </code><code class="sql keyword">union</code> <code class="sql color1">all</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">select</code> <code class="sql plain">n</code><code class="sql string">'李四'</code><code class="sql plain">,n</code><code class="sql string">'语文'</code><code class="sql plain">,80 </code><code class="sql keyword">union</code> <code class="sql color1">all</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">select</code> <code class="sql plain">n</code><code class="sql string">'张三'</code><code class="sql plain">,n</code><code class="sql string">'英语'</code><code class="sql plain">,100</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="sql plain">go</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        这里我用了三种方法来实现行转列第一种:静态行转列</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_178761">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql keyword">select</code> <code class="sql plain">username 姓名,</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="sql color2">sum</code><code class="sql plain">(</code><code class="sql color2">case</code> <code class="sql plain">subject </code><code class="sql keyword">when</code> <code class="sql string">'语文'</code> <code class="sql keyword">then</code> <code class="sql plain">source </code><code class="sql keyword">else</code> <code class="sql plain">0 </code><code class="sql keyword">end</code><code class="sql plain">) 语文,</code><code class="sql color2">sum</code><code class="sql plain">(</code><code class="sql color2">case</code> <code class="sql plain">subject </code><code class="sql keyword">when</code> <code class="sql string">'数学'</code> <code class="sql keyword">then</code> <code class="sql plain">source </code><code class="sql keyword">else</code> <code class="sql plain">0 </code><code class="sql keyword">end</code><code class="sql plain">) 数学,</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="sql color2">sum</code><code class="sql plain">(</code><code class="sql color2">case</code> <code class="sql plain">subject </code><code class="sql keyword">when</code> <code class="sql string">'英语'</code> <code class="sql keyword">then</code> <code class="sql plain">source </code><code class="sql keyword">else</code> <code class="sql plain">0 </code><code class="sql keyword">end</code><code class="sql plain">) 英语 </code><code class="sql keyword">from</code> <code class="sql plain">testtable </code><code class="sql keyword">group</code> <code class="sql keyword">by</code> <code class="sql plain">username</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        用povit行转列</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_624007">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="sql plain">(</code><code class="sql keyword">select</code> <code class="sql plain">username,subject,source </code><code class="sql keyword">from</code> <code class="sql plain">testtable) testpivot(</code><code class="sql color2">sum</code><code class="sql plain">(source) </code><code class="sql keyword">for</code> <code class="sql plain">subject </code><code class="sql color1">in</code><code class="sql plain">(语文,数学,英语)</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="sql plain">) pvt</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        用存储过程行转列</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_376475">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql keyword">alter</code> <code class="sql plain">proc pro_test</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="sql plain">@userimages </code><code class="sql keyword">varchar</code><code class="sql plain">(200),</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="sql plain">@subject </code><code class="sql keyword">varchar</code><code class="sql plain">(20),</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="sql plain">@subject1 </code><code class="sql keyword">varchar</code><code class="sql plain">(200),</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="sql plain">@tablename </code><code class="sql keyword">varchar</code><code class="sql plain">(50)</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="sql keyword">as</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">declare</code> <code class="sql plain">@sql </code><code class="sql keyword">varchar</code><code class="sql plain">(</code><code class="sql keyword">max</code><code class="sql plain">)=</code><code class="sql string">'select * from (select '</code><code class="sql plain">+@userimages+</code><code class="sql string">' from'</code><code class="sql plain">+@tablename+</code><code class="sql string">') tab</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="sql string">pivot</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="sql string">(</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="sql string">sum('</code><code class="sql plain">+@subject+</code><code class="sql string">') for subject('</code><code class="sql plain">+@subject1+</code><code class="sql string">')</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="sql string">) pvt'</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="sql keyword">exec</code> <code class="sql plain">(@sql)</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="sql plain">go</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="sql keyword">exec</code> <code class="sql plain">pro_test </code><code class="sql string">'username,subject,source'</code><code class="sql plain">,</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="sql string">'testtable'</code><code class="sql plain">,</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="sql string">'subject'</code><code class="sql plain">,</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="sql string">'语文,数学,英语'</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        它们的效果都是这样的</p>
<p>
        <img title="sql语句实现行转列的3种方法实例" alt="sql语句实现行转列的3种方法实例" src="https://zhuji.jb51.net/uploads/img/202305/fe16eaf1cf95d13ad3912e7b430dbcda.jpg"></p>
<p>
        以上三种方式实现行转列,我们可以根据自己的需求采用不同的方法</p>
<p>
        <span><strong>总结</strong></span></p>
<p>
        以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
        原文链接:http://www.cnblogs.com/lcq529/p/8400104.html</p>
頁: [1]
查看完整版本: sql语句实现行转列的3种方法实例