From ee9e555b69c359fe6201d63b588c989fd528c7fc Mon Sep 17 00:00:00 2001 From: Hannah Igboke <116895464+HannahIgboke@users.noreply.github.com> Date: Sun, 20 Jul 2025 16:30:44 +0100 Subject: [PATCH 1/7] Create pivoting-in-sql-server.sql --- .../pivot-tables/pivoting-in-sql-server.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 table-operations/pivot-tables/pivoting-in-sql-server.sql diff --git a/table-operations/pivot-tables/pivoting-in-sql-server.sql b/table-operations/pivot-tables/pivoting-in-sql-server.sql new file mode 100644 index 00000000..244f833e --- /dev/null +++ b/table-operations/pivot-tables/pivoting-in-sql-server.sql @@ -0,0 +1,11 @@ +SELECT [role], + [SPRING] AS spring_count, + [FALL] as fall_count +FROM ( + SELECT [role], semester + FROM Teaching + ) AS source +PIVOT ( + COUNT(semester) + FOR semester IN ([SPRING], [FALL]) + ) AS pivot_table; From 8676cbe530ce156a28b73912bba7683b89304caf Mon Sep 17 00:00:00 2001 From: Hannah Igboke <116895464+HannahIgboke@users.noreply.github.com> Date: Sun, 20 Jul 2025 16:51:11 +0100 Subject: [PATCH 2/7] Create pivoting-in-postgresql.sql --- .../pivot-tables/pivoting-in-postgresql.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 table-operations/pivot-tables/pivoting-in-postgresql.sql diff --git a/table-operations/pivot-tables/pivoting-in-postgresql.sql b/table-operations/pivot-tables/pivoting-in-postgresql.sql new file mode 100644 index 00000000..dbde5be8 --- /dev/null +++ b/table-operations/pivot-tables/pivoting-in-postgresql.sql @@ -0,0 +1,13 @@ +-- Enabling the tablefunc extension so we can use crosstab() +CREATE EXTENSION IF NOT EXISTS tablefunc; + +SELECT * +FROM crosstab( + $$ + SELECT role, semester, COUNT(*) + FROM Teaching + GROUP BY role, semester + ORDER BY role, semester + $$, + $$ VALUES ('SPRING'), ('FALL') $$ + ) AS ct(role TEXT, spring_count INT, fall_count INT); From dcc2aeb552d46bb6d85600b0ee0e3fe1495cf7ec Mon Sep 17 00:00:00 2001 From: Hannah Igboke <116895464+HannahIgboke@users.noreply.github.com> Date: Sun, 20 Jul 2025 16:57:45 +0100 Subject: [PATCH 3/7] Create pivoting-in-mysql.sql --- table-operations/pivot-tables/pivoting-in-mysql.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 table-operations/pivot-tables/pivoting-in-mysql.sql diff --git a/table-operations/pivot-tables/pivoting-in-mysql.sql b/table-operations/pivot-tables/pivoting-in-mysql.sql new file mode 100644 index 00000000..449d085e --- /dev/null +++ b/table-operations/pivot-tables/pivoting-in-mysql.sql @@ -0,0 +1,6 @@ +SELECT + role, + COUNT(CASE WHEN semester = 'SPRING' THEN 1 END) AS spring_count, + COUNT(CASE WHEN semester = 'FALL' THEN 1 END) AS fall_count +FROM teaching +GROUP BY role; From 55134a2a9f7425e6d6f4b31a311422c99e39d8fa Mon Sep 17 00:00:00 2001 From: Hannah Igboke <116895464+HannahIgboke@users.noreply.github.com> Date: Sun, 20 Jul 2025 17:00:31 +0100 Subject: [PATCH 4/7] Create inserting-data-into-table.sql --- .../dynamic-pivoting/inserting-data-into-table.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 table-operations/pivot-tables/dynamic-pivoting/inserting-data-into-table.sql diff --git a/table-operations/pivot-tables/dynamic-pivoting/inserting-data-into-table.sql b/table-operations/pivot-tables/dynamic-pivoting/inserting-data-into-table.sql new file mode 100644 index 00000000..57365dd6 --- /dev/null +++ b/table-operations/pivot-tables/dynamic-pivoting/inserting-data-into-table.sql @@ -0,0 +1,12 @@ +INSERT INTO Teaching (id, role, semester, year, course_id, faculty_id) +VALUES +(613, 'Instructor', 'SUMMER', 2023, 'CS111', 111), +(614, 'TA', 'SUMMER', 2023, 'CS111', 300), +(615, 'Instructor', 'SUMMER', 2023, 'CS112', 121), +(616, 'TA', 'SUMMER', 2023, 'CS112', 301); + +INSERT INTO Teaching (id, role, semester, year, course_id, faculty_id) +VALUES +(617, 'Instructor', 'WINTER', 2023, 'CS113', 221), +(618, 'TA', 'WINTER', 2023, 'CS113', 302), +(619, 'Instructor', 'WINTER', 2023, 'CS121', 131); From 386b9c16f6d08ff85e761fc36cc8bd7c09d45e95 Mon Sep 17 00:00:00 2001 From: Hannah Igboke <116895464+HannahIgboke@users.noreply.github.com> Date: Sun, 20 Jul 2025 17:13:07 +0100 Subject: [PATCH 5/7] Create sql-server-dynamic-pivoting.sql --- .../dynamic-pivoting/sql-server-dynamic-pivoting.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 table-operations/pivot-tables/dynamic-pivoting/sql-server-dynamic-pivoting.sql diff --git a/table-operations/pivot-tables/dynamic-pivoting/sql-server-dynamic-pivoting.sql b/table-operations/pivot-tables/dynamic-pivoting/sql-server-dynamic-pivoting.sql new file mode 100644 index 00000000..bd36c158 --- /dev/null +++ b/table-operations/pivot-tables/dynamic-pivoting/sql-server-dynamic-pivoting.sql @@ -0,0 +1,9 @@ +DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX); +SELECT @columns = STRING_AGG(QUOTENAME(semester), ', ') +FROM (SELECT DISTINCT semester FROM Teaching) AS semesters; +SET @sql = ' + SELECT role, ' + @columns + ' + FROM ( SELECT role, semester FROM Teaching ) AS source + PIVOT ( COUNT(semester) FOR semester IN (' + @columns + ') ) AS pivot_table; + '; +EXEC sp_executesql @sql; From 7e8c27741fe529e867dacf13ddd56f173a03d0b1 Mon Sep 17 00:00:00 2001 From: Hannah Igboke <116895464+HannahIgboke@users.noreply.github.com> Date: Sun, 20 Jul 2025 17:18:03 +0100 Subject: [PATCH 6/7] Create postgresql-dymanic-pivoting.sql --- .../postgresql-dymanic-pivoting.sql | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 table-operations/pivot-tables/dynamic-pivoting/postgresql-dymanic-pivoting.sql diff --git a/table-operations/pivot-tables/dynamic-pivoting/postgresql-dymanic-pivoting.sql b/table-operations/pivot-tables/dynamic-pivoting/postgresql-dymanic-pivoting.sql new file mode 100644 index 00000000..aab950c8 --- /dev/null +++ b/table-operations/pivot-tables/dynamic-pivoting/postgresql-dymanic-pivoting.sql @@ -0,0 +1,18 @@ +DO $$ +DECLARE + cols TEXT; + dyn_sql TEXT; +BEGIN + SELECT string_agg( + format('COALESCE(MAX(CASE WHEN semester = %L THEN count END), 0) AS "%s"', semester, semester), + ', ' ) INTO cols + FROM (SELECT DISTINCT semester FROM Teaching) s; + dyn_sql := format( + $f$ + SELECT role, %s + FROM ( SELECT role, semester, COUNT(*) AS count FROM Teaching GROUP BY role, semester ) AS sub + GROUP BY role + ORDER BY role; + $f$, cols); + RAISE NOTICE 'Run this SQL: %', dyn_sql; +END $$; From b30dcaf6451ba4e0f1f92aa5781a986d2d96b919 Mon Sep 17 00:00:00 2001 From: Hannah Igboke <116895464+HannahIgboke@users.noreply.github.com> Date: Sun, 20 Jul 2025 17:29:15 +0100 Subject: [PATCH 7/7] Create mysql-dynamic-pivoting.sql --- .../dynamic-pivoting/mysql-dynamic-pivoting.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 table-operations/pivot-tables/dynamic-pivoting/mysql-dynamic-pivoting.sql diff --git a/table-operations/pivot-tables/dynamic-pivoting/mysql-dynamic-pivoting.sql b/table-operations/pivot-tables/dynamic-pivoting/mysql-dynamic-pivoting.sql new file mode 100644 index 00000000..04402dfe --- /dev/null +++ b/table-operations/pivot-tables/dynamic-pivoting/mysql-dynamic-pivoting.sql @@ -0,0 +1,11 @@ +SET @sql = NULL; +SELECT GROUP_CONCAT(DISTINCT CONCAT( + 'COUNT(CASE WHEN semester = ''', semester, ''' THEN 1 END) AS `', semester, '`' ) ) +INTO @sql +FROM Teaching; +SET @sql = CONCAT('SELECT role, ', @sql, ' + FROM Teaching + GROUP BY role'); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt;