@@ -9,13 +9,13 @@ if (typeof exports === 'object') {
99var data = [ { a : 1 } , { a : 2 } ] ;
1010
1111describe ( 'Test 355 PIVOT' , function ( ) {
12- it . skip ( '1. CREATE DATABASE' , function ( done ) {
12+ it ( '1. CREATE DATABASE' , function ( done ) {
1313 alasql ( 'CREATE DATABASE test355;USE test355' ) ;
1414 done ( ) ;
1515 } ) ;
1616
1717 /* Source: http://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/ */
18- it . skip ( '2. Prepare Data' , function ( done ) {
18+ it ( '2. Prepare Data' , function ( done ) {
1919 alasql ( 'CREATE TABLE Product(Cust VARCHAR(25), Product VARCHAR(20), QTY INT)' ) ;
2020
2121 alasql ( function ( ) {
@@ -40,69 +40,82 @@ describe('Test 355 PIVOT', function () {
4040 done ( ) ;
4141 } ) ;
4242
43- it . skip ( '3. Select Query' , function ( done ) {
44- alasql ( function ( ) {
43+ it ( '3. Select Query' , function ( done ) {
44+ var res = alasql ( function ( ) {
4545 /*
4646 SELECT *
4747 FROM Product
4848 */
4949 } ) ;
5050
51+ assert . equal ( res . length , 7 ) ;
5152 done ( ) ;
5253 } ) ;
5354
54- it . skip ( '4. Pivot Table ordered by PRODUCT' , function ( done ) {
55- alasql ( function ( ) {
55+ it ( '4. Pivot Table ordered by PRODUCT' , function ( done ) {
56+ var res = alasql ( function ( ) {
5657 /*
57- SELECT PRODUCT, FRED, KATE
58- FROM (
59- SELECT CUST, PRODUCT, QTY
60- FROM Product) up
61- PIVOT (SUM(QTY) FOR CUST IN (FRED, KATE)) AS pvt
62- ORDER BY PRODUCT
58+ SELECT * FROM Product
59+ PIVOT (SUM(QTY) FOR Cust IN (FRED, KATE))
60+ ORDER BY Product
6361 */
6462 } ) ;
6563
64+ assert . deepEqual ( res , [
65+ { Product : 'BEER' , FRED : 24 , KATE : 12 } ,
66+ { Product : 'MILK' , FRED : 3 , KATE : 1 } ,
67+ { Product : 'SODA' , KATE : 6 } ,
68+ { Product : 'VEG' , KATE : 5 } ,
69+ ] ) ;
70+
6671 done ( ) ;
6772 } ) ;
6873
69- it . skip ( '5. Pivot Table ordered by CUST' , function ( done ) {
70- alasql ( function ( ) {
74+ it ( '5. Pivot Table ordered by CUST' , function ( done ) {
75+ var res = alasql ( function ( ) {
7176 /*
72- SELECT CUST, VEG, SODA, MILK, BEER, CHIPS
73- FROM (
74- SELECT CUST, PRODUCT, QTY
75- FROM Product) up
76- PIVOT (SUM(QTY) FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)) AS pvt
77- ORDER BY CUST
77+ SELECT * FROM Product
78+ PIVOT (SUM(QTY) FOR Product IN (VEG, SODA, MILK, BEER, CHIPS))
79+ ORDER BY Cust
7880 */
7981 } ) ;
8082
83+ assert . deepEqual ( res , [
84+ { Cust : 'FRED' , MILK : 3 , BEER : 24 } ,
85+ { Cust : 'KATE' , VEG : 5 , SODA : 6 , MILK : 1 , BEER : 12 } ,
86+ ] ) ;
87+
8188 done ( ) ;
8289 } ) ;
8390
84- it . skip ( '6. UnPivot Query' , function ( done ) {
85- alasql ( function ( ) {
91+ it ( '6. UnPivot Query' , function ( done ) {
92+ // First create a pivoted table
93+ alasql ( 'CREATE TABLE pivoted (Cust STRING, VEG INT, SODA INT, MILK INT, BEER INT, CHIPS INT)' ) ;
94+ alasql (
95+ 'INSERT INTO pivoted SELECT * FROM Product PIVOT (SUM(QTY) FOR Product IN (VEG, SODA, MILK, BEER, CHIPS))'
96+ ) ;
97+
98+ var res = alasql ( function ( ) {
8699 /*
87- SELECT CUST, PRODUCT, QTY
88- FROM
89- (
90- SELECT CUST, VEG, SODA, MILK, BEER, CHIPS
91- FROM (
92- SELECT CUST, PRODUCT, QTY
93- FROM Product) up
94- PIVOT
95- ( SUM(QTY) FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)) AS pvt) p
96- UNPIVOT
97- (QTY FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)
98- ) AS Unpvt
100+ SELECT *
101+ FROM pivoted
102+ UNPIVOT (QTY FOR Product IN (VEG, SODA, MILK, BEER, CHIPS))
99103 */
100104 } ) ;
101105
106+ // Should have 10 rows (2 custs * 5 products)
107+ assert . equal ( res . length , 10 ) ;
108+ // Check that all rows have Cust, Product, and QTY
109+ res . forEach ( function ( row ) {
110+ assert ( row . Cust ) ;
111+ assert ( row . Product ) ;
112+ assert ( row . hasOwnProperty ( 'QTY' ) ) ;
113+ } ) ;
114+
102115 done ( ) ;
103116 } ) ;
104117
105- it . skip ( '99. DROP DATABASE' , function ( done ) {
118+ it ( '99. DROP DATABASE' , function ( done ) {
106119 alasql . options . modifier = undefined ;
107120 alasql ( 'DROP DATABASE test355' ) ;
108121 done ( ) ;
0 commit comments