Pivot Columns to Rows in SQL Server
I have a query that returns an entire row and I need to pivot this result into a new table.
SELECT id_no, stud_name, group_no, class_1, class_2, class_3, class_4 FROM tbl_stud_class
This returns the following:
| id_no | stud_name | group_no | class_1 | class_2 | class_3 | class 4 |
| 1 | John Doe | A11 | 84 | 60 | 80 | 79 |
I need to be able to return this row as:
| id_no | stud_name | group_no | class | grade |
| 1 | John Doe | A11 | class_1 | 84 |
| 1 | John Doe | A11 | class_2 | 60 |
| 1 | John Doe | A11 | class_3 | 80 |
| 1 | John Doe | A11 | class_4 | 79 |
Can someone point me to a way to do this please?
I am converting my PostgreSQL function (where i'm using CROSS JOIN LATERAL to SQL Server)
Thank you!
sql-server pivot
add a comment |
I have a query that returns an entire row and I need to pivot this result into a new table.
SELECT id_no, stud_name, group_no, class_1, class_2, class_3, class_4 FROM tbl_stud_class
This returns the following:
| id_no | stud_name | group_no | class_1 | class_2 | class_3 | class 4 |
| 1 | John Doe | A11 | 84 | 60 | 80 | 79 |
I need to be able to return this row as:
| id_no | stud_name | group_no | class | grade |
| 1 | John Doe | A11 | class_1 | 84 |
| 1 | John Doe | A11 | class_2 | 60 |
| 1 | John Doe | A11 | class_3 | 80 |
| 1 | John Doe | A11 | class_4 | 79 |
Can someone point me to a way to do this please?
I am converting my PostgreSQL function (where i'm using CROSS JOIN LATERAL to SQL Server)
Thank you!
sql-server pivot
add a comment |
I have a query that returns an entire row and I need to pivot this result into a new table.
SELECT id_no, stud_name, group_no, class_1, class_2, class_3, class_4 FROM tbl_stud_class
This returns the following:
| id_no | stud_name | group_no | class_1 | class_2 | class_3 | class 4 |
| 1 | John Doe | A11 | 84 | 60 | 80 | 79 |
I need to be able to return this row as:
| id_no | stud_name | group_no | class | grade |
| 1 | John Doe | A11 | class_1 | 84 |
| 1 | John Doe | A11 | class_2 | 60 |
| 1 | John Doe | A11 | class_3 | 80 |
| 1 | John Doe | A11 | class_4 | 79 |
Can someone point me to a way to do this please?
I am converting my PostgreSQL function (where i'm using CROSS JOIN LATERAL to SQL Server)
Thank you!
sql-server pivot
I have a query that returns an entire row and I need to pivot this result into a new table.
SELECT id_no, stud_name, group_no, class_1, class_2, class_3, class_4 FROM tbl_stud_class
This returns the following:
| id_no | stud_name | group_no | class_1 | class_2 | class_3 | class 4 |
| 1 | John Doe | A11 | 84 | 60 | 80 | 79 |
I need to be able to return this row as:
| id_no | stud_name | group_no | class | grade |
| 1 | John Doe | A11 | class_1 | 84 |
| 1 | John Doe | A11 | class_2 | 60 |
| 1 | John Doe | A11 | class_3 | 80 |
| 1 | John Doe | A11 | class_4 | 79 |
Can someone point me to a way to do this please?
I am converting my PostgreSQL function (where i'm using CROSS JOIN LATERAL to SQL Server)
Thank you!
sql-server pivot
sql-server pivot
asked Nov 12 '18 at 21:03
SmileySmiley
1,057103658
1,057103658
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
Just another option is using a CROSS APPLY
Example
Select A.id_no
,A.stud_name
,A.group_no
,B.*
From YourTable A
Cross Apply ( values ('class_1',class_1)
,('class_2',class_2)
,('class_3',class_3)
,('class_4',class_4)
) B(class,grade)
Returns
id_no stud_name group_no class grade
1 John Doe A11 class_1 84
1 John Doe A11 class_2 60
1 John Doe A11 class_3 80
1 John Doe A11 class_4 79
add a comment |
You can use UNPIVOT to get this done in SQL Server. Below is an example using your sample data.
CREATE TABLE #tbl_stud_class
(
id_no int,
stud_name varchar(50),
group_no varchar(50),
class_1 int,
class_2 int,
class_3 int,
class_4 int
)
INSERT INTO #tbl_stud_class VALUES (1, 'John Doe', 'A11', 84, 60, 80, 79)
SELECT *
FROM #tbl_stud_class
UNPIVOT
(
Class FOR Classes IN (class_1, class_2, class_3, class_4)
) AS UP
DROP TABLE #tbl_stud_class
add a comment |
Based on your example, I'd do something like this:
Select
id_no
, stud_name
, group_no
, 'class_1'
, class_1 as grade
From tbl_stud_class
Union All
Select
id_no
, stud_name
, group_no
, 'class_2'
, class_2 as grade
From tbl_stud_class
Union All
etc.
I would also use the full word "student" in my table and field names, but that's not really a database issue... ;)
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53270062%2fpivot-columns-to-rows-in-sql-server%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
Just another option is using a CROSS APPLY
Example
Select A.id_no
,A.stud_name
,A.group_no
,B.*
From YourTable A
Cross Apply ( values ('class_1',class_1)
,('class_2',class_2)
,('class_3',class_3)
,('class_4',class_4)
) B(class,grade)
Returns
id_no stud_name group_no class grade
1 John Doe A11 class_1 84
1 John Doe A11 class_2 60
1 John Doe A11 class_3 80
1 John Doe A11 class_4 79
add a comment |
Just another option is using a CROSS APPLY
Example
Select A.id_no
,A.stud_name
,A.group_no
,B.*
From YourTable A
Cross Apply ( values ('class_1',class_1)
,('class_2',class_2)
,('class_3',class_3)
,('class_4',class_4)
) B(class,grade)
Returns
id_no stud_name group_no class grade
1 John Doe A11 class_1 84
1 John Doe A11 class_2 60
1 John Doe A11 class_3 80
1 John Doe A11 class_4 79
add a comment |
Just another option is using a CROSS APPLY
Example
Select A.id_no
,A.stud_name
,A.group_no
,B.*
From YourTable A
Cross Apply ( values ('class_1',class_1)
,('class_2',class_2)
,('class_3',class_3)
,('class_4',class_4)
) B(class,grade)
Returns
id_no stud_name group_no class grade
1 John Doe A11 class_1 84
1 John Doe A11 class_2 60
1 John Doe A11 class_3 80
1 John Doe A11 class_4 79
Just another option is using a CROSS APPLY
Example
Select A.id_no
,A.stud_name
,A.group_no
,B.*
From YourTable A
Cross Apply ( values ('class_1',class_1)
,('class_2',class_2)
,('class_3',class_3)
,('class_4',class_4)
) B(class,grade)
Returns
id_no stud_name group_no class grade
1 John Doe A11 class_1 84
1 John Doe A11 class_2 60
1 John Doe A11 class_3 80
1 John Doe A11 class_4 79
answered Nov 12 '18 at 21:50
John CappellettiJohn Cappelletti
46.8k62547
46.8k62547
add a comment |
add a comment |
You can use UNPIVOT to get this done in SQL Server. Below is an example using your sample data.
CREATE TABLE #tbl_stud_class
(
id_no int,
stud_name varchar(50),
group_no varchar(50),
class_1 int,
class_2 int,
class_3 int,
class_4 int
)
INSERT INTO #tbl_stud_class VALUES (1, 'John Doe', 'A11', 84, 60, 80, 79)
SELECT *
FROM #tbl_stud_class
UNPIVOT
(
Class FOR Classes IN (class_1, class_2, class_3, class_4)
) AS UP
DROP TABLE #tbl_stud_class
add a comment |
You can use UNPIVOT to get this done in SQL Server. Below is an example using your sample data.
CREATE TABLE #tbl_stud_class
(
id_no int,
stud_name varchar(50),
group_no varchar(50),
class_1 int,
class_2 int,
class_3 int,
class_4 int
)
INSERT INTO #tbl_stud_class VALUES (1, 'John Doe', 'A11', 84, 60, 80, 79)
SELECT *
FROM #tbl_stud_class
UNPIVOT
(
Class FOR Classes IN (class_1, class_2, class_3, class_4)
) AS UP
DROP TABLE #tbl_stud_class
add a comment |
You can use UNPIVOT to get this done in SQL Server. Below is an example using your sample data.
CREATE TABLE #tbl_stud_class
(
id_no int,
stud_name varchar(50),
group_no varchar(50),
class_1 int,
class_2 int,
class_3 int,
class_4 int
)
INSERT INTO #tbl_stud_class VALUES (1, 'John Doe', 'A11', 84, 60, 80, 79)
SELECT *
FROM #tbl_stud_class
UNPIVOT
(
Class FOR Classes IN (class_1, class_2, class_3, class_4)
) AS UP
DROP TABLE #tbl_stud_class
You can use UNPIVOT to get this done in SQL Server. Below is an example using your sample data.
CREATE TABLE #tbl_stud_class
(
id_no int,
stud_name varchar(50),
group_no varchar(50),
class_1 int,
class_2 int,
class_3 int,
class_4 int
)
INSERT INTO #tbl_stud_class VALUES (1, 'John Doe', 'A11', 84, 60, 80, 79)
SELECT *
FROM #tbl_stud_class
UNPIVOT
(
Class FOR Classes IN (class_1, class_2, class_3, class_4)
) AS UP
DROP TABLE #tbl_stud_class
edited Nov 12 '18 at 21:16
answered Nov 12 '18 at 21:11
Chris AlbertChris Albert
1,50221522
1,50221522
add a comment |
add a comment |
Based on your example, I'd do something like this:
Select
id_no
, stud_name
, group_no
, 'class_1'
, class_1 as grade
From tbl_stud_class
Union All
Select
id_no
, stud_name
, group_no
, 'class_2'
, class_2 as grade
From tbl_stud_class
Union All
etc.
I would also use the full word "student" in my table and field names, but that's not really a database issue... ;)
add a comment |
Based on your example, I'd do something like this:
Select
id_no
, stud_name
, group_no
, 'class_1'
, class_1 as grade
From tbl_stud_class
Union All
Select
id_no
, stud_name
, group_no
, 'class_2'
, class_2 as grade
From tbl_stud_class
Union All
etc.
I would also use the full word "student" in my table and field names, but that's not really a database issue... ;)
add a comment |
Based on your example, I'd do something like this:
Select
id_no
, stud_name
, group_no
, 'class_1'
, class_1 as grade
From tbl_stud_class
Union All
Select
id_no
, stud_name
, group_no
, 'class_2'
, class_2 as grade
From tbl_stud_class
Union All
etc.
I would also use the full word "student" in my table and field names, but that's not really a database issue... ;)
Based on your example, I'd do something like this:
Select
id_no
, stud_name
, group_no
, 'class_1'
, class_1 as grade
From tbl_stud_class
Union All
Select
id_no
, stud_name
, group_no
, 'class_2'
, class_2 as grade
From tbl_stud_class
Union All
etc.
I would also use the full word "student" in my table and field names, but that's not really a database issue... ;)
answered Nov 12 '18 at 21:11
BrianBrian
9542716
9542716
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53270062%2fpivot-columns-to-rows-in-sql-server%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown