Thursday, March 22, 2018

SQL: The PIVOT clause

The PIVOT clause allow you to display data of different categories in one row. It is a new feature added in 11g.

Let's say you have the following Inventory table.

StoreName             Product           Quantity
----------------         --------------      ----------
store 1                    Apple               100
store 1                    Banana             350
store 1                    Pineapple         300
store 2                    Apple               150
store 2                    Banana              300
store 2                    Pineapple          250
store 3                    Apple                200
store 3                    Banana              180
store 3                    Pineapple           260

SQL> select * from Inventory where not StoreName = 'store 3' order by StoreName;

Output:

StoreName             Product           Quantity
----------------         --------------      ----------
store 1                    Apple               100
store 1                    Banana             350
store 1                    Pineapple         300
store 2                    Apple               150
store 2                    Banana              300
store 2                    Pineapple          250

If you want to view all the products of each store in one row, the PIVOT clause will help.

SQL> select * from
           (
                  select StoreName, Product, Quantity from Inventory
           )
            PIVOT
           (
                   sum(Quantity) as Qty for Product in ('Apple' as Apple, 'Banana' as Banana, 'Pineapple' as Pineapple)
            )
            where not StoreName = 'store 3' order by StoreName;

Output:

StoreName         Apple_Qty         Banana_Qty        Pineapple_Qty
--------------        -------------          --------------          ----------------
store 1                100                     350                       300
store 2                150                     300                       250

SQL> select * from
           (
                 select StoreName, Quantity from Inventory
            )
            PIVOT
            (
                     sum(Quantity) for StoreName in ('store 1', 'store 2', 'store 3')
            );

Output:

store 1           store 2           store 3
---------         ---------           ---------
750               700                 640

SQL> select StoreName, sum(Quantity) as "Total Quantity" from Inventory group by StoreName;

Output:

StoreName           Total Quantity
-------------            ------------------
store 1                   750
store 2                    700
store 3                   640

-----------------------------------------------------------------------------------------------------------------

                        
If you have ever asked yourself these questions, this is the book for you. What is the meaning of life? Why do people suffer? What is in control of my life? Why is life the way it is? How can I stop suffering and be happy? How can I have a successful life? How can I have a life I like to have? How can I be the person I like to be? How can I be wiser and smarter? How can I have good and harmonious relations with others? Why do people meditate to achieve enlightenment? What is the true meaning of spiritual practice? Why all beings are one? Read the book free here.


No comments:

Post a Comment