forked from docs/doc-exports
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com> Reviewed-by: Rechenburg, Matthias <matthias.rechenburg@t-systems.com> Co-authored-by: Lu, Huayi <luhuayi@huawei.com> Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
274 lines
46 KiB
HTML
274 lines
46 KiB
HTML
<a name="EN-US_TOPIC_0000001490899666"></a><a name="EN-US_TOPIC_0000001490899666"></a>
|
|
|
|
<h1 class="topictitle1">How Does GaussDB(DWS) Implement Row-to-Column and Column-to-Row Conversion?</h1>
|
|
<div id="body0000001490899666"><p id="EN-US_TOPIC_0000001490899666__p687632219212">This section describes how to use SQL statements to convert rows to columns and convert columns to rows in GaussDB(DWS).</p>
|
|
<div class="section" id="EN-US_TOPIC_0000001490899666__section19579162203118"><h4 class="sectiontitle">Scenario</h4><p id="EN-US_TOPIC_0000001490899666__p11360143393113">Use a student score table as an example:</p>
|
|
<p id="EN-US_TOPIC_0000001490899666__p23454663915">Teachers record the score of each subject of each student in a table, but students care only bout their own scores. A student needs to use row-to-column conversion to view their scores of all subjects. If the teacher of a subject wants to view the sores of all students of that subject, the teacher needs to use the column-to-row conversion.</p>
|
|
<p id="EN-US_TOPIC_0000001490899666__p08761822142119">The following figure shows the row-to-column and column-to-row conversion.</p>
|
|
<div class="fignone" id="EN-US_TOPIC_0000001490899666__fig124943224518"><span class="figcap"><b>Figure 1 </b>Diagram</span><br><span><img id="EN-US_TOPIC_0000001490899666__image12491232104515" src="figure/en-us_image_0000001494484296.png" title="Click to enlarge" class="imgResize"></span></div>
|
|
<ul id="EN-US_TOPIC_0000001490899666__ul10876622192114"><li id="EN-US_TOPIC_0000001490899666__li1887662262117">Rows-to-column conversion<p id="EN-US_TOPIC_0000001490899666__p1787702232114"><a name="EN-US_TOPIC_0000001490899666__li1887662262117"></a><a name="li1887662262117"></a>Convert multiple rows of data into one row, or convert one column of data into multiple columns.</p>
|
|
</li><li id="EN-US_TOPIC_0000001490899666__li3877152202111">Column-to-row conversion<p id="EN-US_TOPIC_0000001490899666__p10877022152112"><a name="EN-US_TOPIC_0000001490899666__li3877152202111"></a><a name="li3877152202111"></a>Convert a row of data into multiple rows, or convert multiple columns of data into one column.</p>
|
|
</li></ul>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001490899666__section145371159192812"><h4 class="sectiontitle">Example</h4><ul id="EN-US_TOPIC_0000001490899666__ul16782178162314"><li id="EN-US_TOPIC_0000001490899666__li1378210862314">Create a row-store table <strong id="EN-US_TOPIC_0000001490899666__b0784112261617">students_info</strong>, and insert data into the table.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen19885316228"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">students_info</span><span class="p">(</span><span class="n">name</span><span class="w"> </span><span class="nb">varchar</span><span class="p">(</span><span class="mi">20</span><span class="p">),</span><span class="n">subject</span><span class="w"> </span><span class="nb">varchar</span><span class="p">(</span><span class="mi">100</span><span class="p">),</span><span class="n">score</span><span class="w"> </span><span class="nb">bigint</span><span class="p">)</span><span class="w"> </span><span class="n">distribute</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">hash</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'lily'</span><span class="p">,</span><span class="s1">'math'</span><span class="p">,</span><span class="mi">95</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'lily'</span><span class="p">,</span><span class="s1">'physics'</span><span class="p">,</span><span class="mi">80</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'lily'</span><span class="p">,</span><span class="s1">'literature'</span><span class="p">,</span><span class="mi">92</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'matu'</span><span class="p">,</span><span class="s1">'math'</span><span class="p">,</span><span class="mi">75</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'matu'</span><span class="p">,</span><span class="s1">'physics'</span><span class="p">,</span><span class="mi">90</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'matu'</span><span class="p">,</span><span class="s1">'literature'</span><span class="p">,</span><span class="mi">85</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'jack'</span><span class="p">,</span><span class="s1">'math'</span><span class="p">,</span><span class="mi">90</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'jack'</span><span class="p">,</span><span class="s1">'physics'</span><span class="p">,</span><span class="mi">95</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'jack'</span><span class="p">,</span><span class="s1">'literature'</span><span class="p">,</span><span class="mi">95</span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<div class="p" id="EN-US_TOPIC_0000001490899666__p11753113272918">View information about the <strong id="EN-US_TOPIC_0000001490899666__b986552861619">students_info</strong> table.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen350192316246"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">students_info</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">subject</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">score</span>
|
|
<span class="c1">------+------------+-------</span>
|
|
<span class="w"> </span><span class="n">matu</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">75</span>
|
|
<span class="w"> </span><span class="n">matu</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span>
|
|
<span class="w"> </span><span class="n">matu</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">85</span>
|
|
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span>
|
|
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">80</span>
|
|
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">92</span>
|
|
<span class="w"> </span><span class="n">jack</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span>
|
|
<span class="w"> </span><span class="n">jack</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span>
|
|
<span class="w"> </span><span class="n">jack</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
</li><li id="EN-US_TOPIC_0000001490899666__li0766181917230">Create a column-store table <strong id="EN-US_TOPIC_0000001490899666__b20281123612169">students_info1</strong>, and insert data into the table.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen363004735814"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">students_info1</span><span class="p">(</span><span class="n">name</span><span class="w"> </span><span class="nb">varchar</span><span class="p">(</span><span class="mi">20</span><span class="p">),</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="nb">bigint</span><span class="p">,</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="nb">bigint</span><span class="p">,</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="nb">bigint</span><span class="p">)</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="p">(</span><span class="n">orientation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">column</span><span class="p">)</span><span class="w"> </span><span class="n">distribute</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">hash</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info1</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'lily'</span><span class="p">,</span><span class="mi">95</span><span class="p">,</span><span class="mi">80</span><span class="p">,</span><span class="mi">92</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info1</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'matu'</span><span class="p">,</span><span class="mi">75</span><span class="p">,</span><span class="mi">90</span><span class="p">,</span><span class="mi">85</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">students_info1</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'jack'</span><span class="p">,</span><span class="mi">90</span><span class="p">,</span><span class="mi">95</span><span class="p">,</span><span class="mi">95</span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001490899666__p123837576714">View information about table <strong id="EN-US_TOPIC_0000001490899666__b1036274311616">students_info1</strong>.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen17834144289"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span>
|
|
<span class="normal">5</span>
|
|
<span class="normal">6</span>
|
|
<span class="normal">7</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">students_info1</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">literature</span>
|
|
<span class="c1">------+------+---------+------------</span>
|
|
<span class="w"> </span><span class="n">matu</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">75</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">85</span>
|
|
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">80</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">92</span>
|
|
<span class="w"> </span><span class="n">jack</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span>
|
|
<span class="p">(</span><span class="mi">3</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</li></ul>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001490899666__section3157440152918"><h4 class="sectiontitle">Static row-to-column conversion</h4><p id="EN-US_TOPIC_0000001490899666__p6282553123012">Static row-to-column conversion requires you to manually specify the column names using the given values. If no value is given to a column, the default value <strong id="EN-US_TOPIC_0000001490899666__b1674394114222">0</strong> is assigned to the column.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen13191173017311"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">name</span><span class="p">,</span>
|
|
<span class="k">sum</span><span class="p">(</span><span class="k">case</span><span class="w"> </span><span class="k">when</span><span class="w"> </span><span class="n">subject</span><span class="o">=</span><span class="s1">'math'</span><span class="w"> </span><span class="k">then</span><span class="w"> </span><span class="n">score</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">end</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">math</span><span class="p">,</span>
|
|
<span class="k">sum</span><span class="p">(</span><span class="k">case</span><span class="w"> </span><span class="k">when</span><span class="w"> </span><span class="n">subject</span><span class="o">=</span><span class="s1">'physics'</span><span class="w"> </span><span class="k">then</span><span class="w"> </span><span class="n">score</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">end</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">physics</span><span class="p">,</span>
|
|
<span class="k">sum</span><span class="p">(</span><span class="k">case</span><span class="w"> </span><span class="k">when</span><span class="w"> </span><span class="n">subject</span><span class="o">=</span><span class="s1">'literature'</span><span class="w"> </span><span class="k">then</span><span class="w"> </span><span class="n">score</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">end</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">students_info</span><span class="w"> </span><span class="k">GROUP</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">literature</span>
|
|
<span class="c1">------+------+---------+------------</span>
|
|
<span class="w"> </span><span class="n">matu</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">75</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">85</span>
|
|
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">80</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">92</span>
|
|
<span class="w"> </span><span class="n">jack</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span>
|
|
<span class="p">(</span><span class="mi">3</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001490899666__section13131175333119"><h4 class="sectiontitle">Dynamic row-to-column conversion</h4><p id="EN-US_TOPIC_0000001490899666__p10343145211325">For clusters of 8.1.2 or later, you can use <strong id="EN-US_TOPIC_0000001490899666__b2761142219239">GROUP_CONCAT</strong> to generate column-store statements.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen1034375253212"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">group_concat</span><span class="p">(</span><span class="n">concat</span><span class="p">(</span><span class="s1">'sum(IF(subject = '''</span><span class="p">,</span><span class="w"> </span><span class="n">subject</span><span class="p">,</span><span class="w"> </span><span class="s1">''', score, 0)) AS "'</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="s1">'"'</span><span class="p">))</span><span class="k">FROM</span><span class="w"> </span><span class="n">students_info</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">group_concat</span>
|
|
|
|
<span class="c1">-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="c1">-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="c1">------------------------</span>
|
|
<span class="w"> </span><span class="k">sum</span><span class="p">(</span><span class="k">IF</span><span class="p">(</span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'literature'</span><span class="p">,</span><span class="w"> </span><span class="n">score</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"jack"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">IF</span><span class="p">(</span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'literature'</span><span class="p">,</span><span class="w"> </span><span class="n">score</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"lily"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">IF</span><span class="p">(</span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'literature'</span><span class="p">,</span><span class="w"> </span><span class="n">score</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"matu"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">IF</span><span class="p">(</span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'math'</span><span class="p">,</span><span class="w"> </span><span class="n">score</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"jack"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">IF</span>
|
|
<span class="p">(</span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'math'</span><span class="p">,</span><span class="w"> </span><span class="n">score</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"lily"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">IF</span><span class="p">(</span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'math'</span><span class="p">,</span><span class="w"> </span><span class="n">score</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"matu"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">IF</span><span class="p">(</span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'physics'</span><span class="p">,</span><span class="w"> </span><span class="n">score</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"jack"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">IF</span><span class="p">(</span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'physics'</span><span class="p">,</span><span class="w"> </span><span class="n">score</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"lily"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">IF</span><span class="p">(</span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'physics</span>
|
|
<span class="s1">'</span><span class="p">,</span><span class="w"> </span><span class="n">score</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"matu"</span>
|
|
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001490899666__p6343152193214">In 8.1.1 and earlier versions, you can use <strong id="EN-US_TOPIC_0000001490899666__b113102720241">LISTAGG</strong> to generate column-store statements.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen163434529325"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span>
|
|
<span class="normal">5</span>
|
|
<span class="normal">6</span>
|
|
<span class="normal">7</span>
|
|
<span class="normal">8</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">listagg</span><span class="p">(</span><span class="n">concat</span><span class="p">(</span><span class="s1">'sum(case when subject = '''</span><span class="p">,</span><span class="w"> </span><span class="n">subject</span><span class="p">,</span><span class="w"> </span><span class="s1">''' then score else 0 end) AS "'</span><span class="p">,</span><span class="w"> </span><span class="n">subject</span><span class="p">,</span><span class="w"> </span><span class="s1">'"'</span><span class="p">),</span><span class="s1">','</span><span class="p">)</span><span class="w"> </span><span class="n">within</span><span class="w"> </span><span class="k">GROUP</span><span class="p">(</span><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="k">FROM</span><span class="w"> </span><span class="p">(</span><span class="k">select</span><span class="w"> </span><span class="k">distinct</span><span class="w"> </span><span class="n">subject</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">students_info</span><span class="p">);</span>
|
|
<span class="w"> </span><span class="n">listagg</span>
|
|
|
|
<span class="c1">-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="c1">--</span>
|
|
<span class="w"> </span><span class="k">sum</span><span class="p">(</span><span class="k">case</span><span class="w"> </span><span class="k">when</span><span class="w"> </span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'literature'</span><span class="w"> </span><span class="k">then</span><span class="w"> </span><span class="n">score</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">end</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"literature"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">case</span><span class="w"> </span><span class="k">when</span><span class="w"> </span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'physics'</span><span class="w"> </span><span class="k">then</span><span class="w"> </span><span class="n">score</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">end</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"physics"</span><span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="k">case</span><span class="w"> </span><span class="k">when</span><span class="w"> </span><span class="n">subject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'math'</span><span class="w"> </span><span class="k">then</span><span class="w"> </span><span class="n">score</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">end</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="ss">"math</span>
|
|
<span class="ss">"</span>
|
|
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001490899666__p20470587282">Dynamically rebuild the view:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen101494472918"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">FUNCTION</span><span class="w"> </span><span class="n">build_view</span><span class="p">()</span>
|
|
<span class="k">RETURNS</span><span class="w"> </span><span class="n">VOID</span>
|
|
<span class="k">LANGUAGE</span><span class="w"> </span><span class="n">plpgsql</span>
|
|
<span class="k">AS</span><span class="w"> </span><span class="err">$$</span><span class="w"> </span><span class="k">DECLARE</span>
|
|
<span class="k">sql</span><span class="w"> </span><span class="nb">text</span><span class="p">;</span>
|
|
<span class="n">rec</span><span class="w"> </span><span class="n">record</span><span class="p">;</span>
|
|
<span class="k">BEGIN</span>
|
|
<span class="k">sql</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="s1">'select LISTAGG(</span>
|
|
<span class="s1"> CONCAT( ''sum(case when subject = '''''', subject, '''''' then score else 0 end) AS "'', subject, ''"'' )</span>
|
|
<span class="s1"> ,'','' ) within group(order by 1) from (select distinct subject from students_info);'</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">EXECUTE</span><span class="w"> </span><span class="k">sql</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">rec</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">sql</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="s1">'drop view if exists get_score'</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">EXECUTE</span><span class="w"> </span><span class="k">sql</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">sql</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="s1">'create view get_score as select name, '</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">rec</span><span class="p">.</span><span class="n">LISTAGG</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="s1">' from students_info group by name'</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">EXECUTE</span><span class="w"> </span><span class="k">sql</span><span class="p">;</span>
|
|
<span class="k">END</span><span class="err">$$</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001490899666__p4850254235">Rebuild the database:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen1932651242316"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CALL</span><span class="w"> </span><span class="n">build_view</span><span class="p">();</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001490899666__p2021012578174">Query view:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen1572191281820"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span>
|
|
<span class="normal">5</span>
|
|
<span class="normal">6</span>
|
|
<span class="normal">7</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">get_score</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">math</span>
|
|
<span class="c1">------+------------+---------+------</span>
|
|
<span class="w"> </span><span class="n">matu</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">85</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">75</span>
|
|
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">92</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">80</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span>
|
|
<span class="w"> </span><span class="n">jack</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span>
|
|
<span class="p">(</span><span class="mi">3</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001490899666__section151602442330"><h4 class="sectiontitle">Column-to-Row Conversion</h4><p id="EN-US_TOPIC_0000001490899666__p146836417222">Use <strong id="EN-US_TOPIC_0000001490899666__b1822319172511">UNION ALL</strong> to merge subjects (math, physics, and literature) into one column. The following is an example:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001490899666__screen448019810240"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span>
|
|
<span class="p">(</span>
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="s1">'math'</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">subject</span><span class="p">,</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">score</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">students_info1</span>
|
|
<span class="k">union</span><span class="w"> </span><span class="k">all</span>
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="s1">'physics'</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">subject</span><span class="p">,</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">score</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">students_info1</span>
|
|
<span class="k">union</span><span class="w"> </span><span class="k">all</span>
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="s1">'literature'</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">subject</span><span class="p">,</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">score</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">students_info1</span>
|
|
<span class="p">)</span><span class="w"> </span>
|
|
<span class="k">order</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">subject</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">score</span>
|
|
<span class="c1">------+------------+-------</span>
|
|
<span class="w"> </span><span class="n">jack</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span>
|
|
<span class="w"> </span><span class="n">jack</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span>
|
|
<span class="w"> </span><span class="n">jack</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span>
|
|
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">95</span>
|
|
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">80</span>
|
|
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">92</span>
|
|
<span class="w"> </span><span class="n">matu</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">math</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">75</span>
|
|
<span class="w"> </span><span class="n">matu</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">physics</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">90</span>
|
|
<span class="w"> </span><span class="n">matu</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">literature</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">85</span>
|
|
<span class="p">(</span><span class="mi">9</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_03_0065.html">Database Usage</a></div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<script language="JavaScript">
|
|
<!--
|
|
image_size('.imgResize');
|
|
var msg_imageMax = "view original image";
|
|
var msg_imageClose = "close";
|
|
//--></script> |