Order table by two columns
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
I would like to order this table but I can not find a way to make it work. Can you help me?
I have this table:
I need this:
I have a table where documents are listed, the first field is the id of the document and the second field represents the father, so I must show a list where you can see in an orderly manner that 242 is the first document and 252 and 335 were generated from the 242.
The query:
select * from table_name order by col1 ASC, Col2 ASC
...doesn't work for me. I do this query:
SELECT
FR1.[report_id],
FR1.[report_parent]
FROM [FARA_reports] FR1
WHERE
FR1.[report_is_delete] <> 1
AND FR1.[report_is_tmp] <> 1
ORDER BY
FR1.[report_id] asc,
FR1.[report_parent] desc
and this is my first image.
sql-server sql-server-2008 order-by
New contributor
add a comment |
I would like to order this table but I can not find a way to make it work. Can you help me?
I have this table:
I need this:
I have a table where documents are listed, the first field is the id of the document and the second field represents the father, so I must show a list where you can see in an orderly manner that 242 is the first document and 252 and 335 were generated from the 242.
The query:
select * from table_name order by col1 ASC, Col2 ASC
...doesn't work for me. I do this query:
SELECT
FR1.[report_id],
FR1.[report_parent]
FROM [FARA_reports] FR1
WHERE
FR1.[report_is_delete] <> 1
AND FR1.[report_is_tmp] <> 1
ORDER BY
FR1.[report_id] asc,
FR1.[report_parent] desc
and this is my first image.
sql-server sql-server-2008 order-by
New contributor
add a comment |
I would like to order this table but I can not find a way to make it work. Can you help me?
I have this table:
I need this:
I have a table where documents are listed, the first field is the id of the document and the second field represents the father, so I must show a list where you can see in an orderly manner that 242 is the first document and 252 and 335 were generated from the 242.
The query:
select * from table_name order by col1 ASC, Col2 ASC
...doesn't work for me. I do this query:
SELECT
FR1.[report_id],
FR1.[report_parent]
FROM [FARA_reports] FR1
WHERE
FR1.[report_is_delete] <> 1
AND FR1.[report_is_tmp] <> 1
ORDER BY
FR1.[report_id] asc,
FR1.[report_parent] desc
and this is my first image.
sql-server sql-server-2008 order-by
New contributor
I would like to order this table but I can not find a way to make it work. Can you help me?
I have this table:
I need this:
I have a table where documents are listed, the first field is the id of the document and the second field represents the father, so I must show a list where you can see in an orderly manner that 242 is the first document and 252 and 335 were generated from the 242.
The query:
select * from table_name order by col1 ASC, Col2 ASC
...doesn't work for me. I do this query:
SELECT
FR1.[report_id],
FR1.[report_parent]
FROM [FARA_reports] FR1
WHERE
FR1.[report_is_delete] <> 1
AND FR1.[report_is_tmp] <> 1
ORDER BY
FR1.[report_id] asc,
FR1.[report_parent] desc
and this is my first image.
sql-server sql-server-2008 order-by
sql-server sql-server-2008 order-by
New contributor
New contributor
edited 2 days ago
Paul White♦
54.2k14288461
54.2k14288461
New contributor
asked Apr 9 at 22:57
Liliana del Carmen CastellanosLiliana del Carmen Castellanos
182
182
New contributor
New contributor
add a comment |
add a comment |
5 Answers
5
active
oldest
votes
Another option:
select a, b
from t
order by
case when a < b or b is null then a else b end,
case when a < b or b is null then b else a end ;
Test in dbfiddle.uk.
Can't you just order byisnull(id2, id1), id2
?
– bendataclear
2 days ago
1
@bendtaclear yes. When I wrote the answer, it wasn't clear that first column can never be null.
– ypercubeᵀᴹ
2 days ago
These really work for me :D
– Liliana del Carmen Castellanos
2 days ago
add a comment |
Your data:
CREATE TABLE dbo.WEIRD_ORDERING
(
ID1 INT NULL,
ID2 INT NULL
);
INSERT INTO dbo.WEIRD_ORDERING VALUES
(242, NULL),
(243, NULL),
(244, NULL),
(252, 242),
(254, NULL),
(255, NULL),
(256, NULL),
(292, NULL),
(308, NULL),
(311, NULL),
(313, 311),
(314, 311),
(323, NULL),
(324, 311),
(335, 242),
(340, NULL),
(341, NULL),
(358, NULL),
(372, NULL),
(373, NULL),
(377, NULL),
(378, 358),
(379, 358),
(380, 358),
(381, 358);
This gives you results in the desired order:
SELECT ID1, ID2
FROM
(
SELECT ID1, ID2, ID1 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 <= ID2 OR ID2 IS NULL
UNION ALL
SELECT ID1, ID2, ID2 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 > ID2 OR ID1 IS NULL
) q
ORDER BY ORDERING_COLUMN;
db fiddle
Thank you so much. You are AWESOME!! :D
– Liliana del Carmen Castellanos
2 days ago
This doesn't quite work, if you reorder your input data from(313, 311), (314, 311)
to(314, 311),(313, 311)
it comes out in the wrong order, I suggest updating the order by statement to beORDER BY ORDERING_COLUMN, ID1
to fix that
– Xynos
2 days ago
@Xynos feel free to edit
– Joe Obbish
2 days ago
add a comment |
Stealing the sql fiddle table from Joe Obbish this is a simple solution
SELECT * FROM dbo.WEIRD_ORDERING
ORDER BY coalesce(ID2*1000+1, ID1*1000)
New contributor
add a comment |
SELECT *
FROM datatable
ORDER BY CASE WHEN field2 IS NULL THEN field1 ELSE field2 END, -- sort groups
CASE WHEN field2 IS NULL THEN 1 ELSE 2 END, -- move parent first
field2 -- sort childs
add a comment |
All answers so far rely on an assumption that there are no further levels of "generated from" (e.g. there is no 382 generated from the 381 which is itself generated from 352 - or which was it).
They should know what is said of "assume", so they should have asked you about this first.
If you can indeed have further levels of "generated from", then you need a recursive query to do the full path construction ("352" , "352/381" , "352/381/382" , etc etc) and ORDER BY that full path.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "182"
};
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: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
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
});
}
});
Liliana del Carmen Castellanos is a new contributor. Be nice, and check out our Code of Conduct.
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%2fdba.stackexchange.com%2fquestions%2f234368%2forder-table-by-two-columns%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
Another option:
select a, b
from t
order by
case when a < b or b is null then a else b end,
case when a < b or b is null then b else a end ;
Test in dbfiddle.uk.
Can't you just order byisnull(id2, id1), id2
?
– bendataclear
2 days ago
1
@bendtaclear yes. When I wrote the answer, it wasn't clear that first column can never be null.
– ypercubeᵀᴹ
2 days ago
These really work for me :D
– Liliana del Carmen Castellanos
2 days ago
add a comment |
Another option:
select a, b
from t
order by
case when a < b or b is null then a else b end,
case when a < b or b is null then b else a end ;
Test in dbfiddle.uk.
Can't you just order byisnull(id2, id1), id2
?
– bendataclear
2 days ago
1
@bendtaclear yes. When I wrote the answer, it wasn't clear that first column can never be null.
– ypercubeᵀᴹ
2 days ago
These really work for me :D
– Liliana del Carmen Castellanos
2 days ago
add a comment |
Another option:
select a, b
from t
order by
case when a < b or b is null then a else b end,
case when a < b or b is null then b else a end ;
Test in dbfiddle.uk.
Another option:
select a, b
from t
order by
case when a < b or b is null then a else b end,
case when a < b or b is null then b else a end ;
Test in dbfiddle.uk.
answered 2 days ago
ypercubeᵀᴹypercubeᵀᴹ
78.6k11137221
78.6k11137221
Can't you just order byisnull(id2, id1), id2
?
– bendataclear
2 days ago
1
@bendtaclear yes. When I wrote the answer, it wasn't clear that first column can never be null.
– ypercubeᵀᴹ
2 days ago
These really work for me :D
– Liliana del Carmen Castellanos
2 days ago
add a comment |
Can't you just order byisnull(id2, id1), id2
?
– bendataclear
2 days ago
1
@bendtaclear yes. When I wrote the answer, it wasn't clear that first column can never be null.
– ypercubeᵀᴹ
2 days ago
These really work for me :D
– Liliana del Carmen Castellanos
2 days ago
Can't you just order by
isnull(id2, id1), id2
?– bendataclear
2 days ago
Can't you just order by
isnull(id2, id1), id2
?– bendataclear
2 days ago
1
1
@bendtaclear yes. When I wrote the answer, it wasn't clear that first column can never be null.
– ypercubeᵀᴹ
2 days ago
@bendtaclear yes. When I wrote the answer, it wasn't clear that first column can never be null.
– ypercubeᵀᴹ
2 days ago
These really work for me :D
– Liliana del Carmen Castellanos
2 days ago
These really work for me :D
– Liliana del Carmen Castellanos
2 days ago
add a comment |
Your data:
CREATE TABLE dbo.WEIRD_ORDERING
(
ID1 INT NULL,
ID2 INT NULL
);
INSERT INTO dbo.WEIRD_ORDERING VALUES
(242, NULL),
(243, NULL),
(244, NULL),
(252, 242),
(254, NULL),
(255, NULL),
(256, NULL),
(292, NULL),
(308, NULL),
(311, NULL),
(313, 311),
(314, 311),
(323, NULL),
(324, 311),
(335, 242),
(340, NULL),
(341, NULL),
(358, NULL),
(372, NULL),
(373, NULL),
(377, NULL),
(378, 358),
(379, 358),
(380, 358),
(381, 358);
This gives you results in the desired order:
SELECT ID1, ID2
FROM
(
SELECT ID1, ID2, ID1 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 <= ID2 OR ID2 IS NULL
UNION ALL
SELECT ID1, ID2, ID2 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 > ID2 OR ID1 IS NULL
) q
ORDER BY ORDERING_COLUMN;
db fiddle
Thank you so much. You are AWESOME!! :D
– Liliana del Carmen Castellanos
2 days ago
This doesn't quite work, if you reorder your input data from(313, 311), (314, 311)
to(314, 311),(313, 311)
it comes out in the wrong order, I suggest updating the order by statement to beORDER BY ORDERING_COLUMN, ID1
to fix that
– Xynos
2 days ago
@Xynos feel free to edit
– Joe Obbish
2 days ago
add a comment |
Your data:
CREATE TABLE dbo.WEIRD_ORDERING
(
ID1 INT NULL,
ID2 INT NULL
);
INSERT INTO dbo.WEIRD_ORDERING VALUES
(242, NULL),
(243, NULL),
(244, NULL),
(252, 242),
(254, NULL),
(255, NULL),
(256, NULL),
(292, NULL),
(308, NULL),
(311, NULL),
(313, 311),
(314, 311),
(323, NULL),
(324, 311),
(335, 242),
(340, NULL),
(341, NULL),
(358, NULL),
(372, NULL),
(373, NULL),
(377, NULL),
(378, 358),
(379, 358),
(380, 358),
(381, 358);
This gives you results in the desired order:
SELECT ID1, ID2
FROM
(
SELECT ID1, ID2, ID1 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 <= ID2 OR ID2 IS NULL
UNION ALL
SELECT ID1, ID2, ID2 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 > ID2 OR ID1 IS NULL
) q
ORDER BY ORDERING_COLUMN;
db fiddle
Thank you so much. You are AWESOME!! :D
– Liliana del Carmen Castellanos
2 days ago
This doesn't quite work, if you reorder your input data from(313, 311), (314, 311)
to(314, 311),(313, 311)
it comes out in the wrong order, I suggest updating the order by statement to beORDER BY ORDERING_COLUMN, ID1
to fix that
– Xynos
2 days ago
@Xynos feel free to edit
– Joe Obbish
2 days ago
add a comment |
Your data:
CREATE TABLE dbo.WEIRD_ORDERING
(
ID1 INT NULL,
ID2 INT NULL
);
INSERT INTO dbo.WEIRD_ORDERING VALUES
(242, NULL),
(243, NULL),
(244, NULL),
(252, 242),
(254, NULL),
(255, NULL),
(256, NULL),
(292, NULL),
(308, NULL),
(311, NULL),
(313, 311),
(314, 311),
(323, NULL),
(324, 311),
(335, 242),
(340, NULL),
(341, NULL),
(358, NULL),
(372, NULL),
(373, NULL),
(377, NULL),
(378, 358),
(379, 358),
(380, 358),
(381, 358);
This gives you results in the desired order:
SELECT ID1, ID2
FROM
(
SELECT ID1, ID2, ID1 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 <= ID2 OR ID2 IS NULL
UNION ALL
SELECT ID1, ID2, ID2 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 > ID2 OR ID1 IS NULL
) q
ORDER BY ORDERING_COLUMN;
db fiddle
Your data:
CREATE TABLE dbo.WEIRD_ORDERING
(
ID1 INT NULL,
ID2 INT NULL
);
INSERT INTO dbo.WEIRD_ORDERING VALUES
(242, NULL),
(243, NULL),
(244, NULL),
(252, 242),
(254, NULL),
(255, NULL),
(256, NULL),
(292, NULL),
(308, NULL),
(311, NULL),
(313, 311),
(314, 311),
(323, NULL),
(324, 311),
(335, 242),
(340, NULL),
(341, NULL),
(358, NULL),
(372, NULL),
(373, NULL),
(377, NULL),
(378, 358),
(379, 358),
(380, 358),
(381, 358);
This gives you results in the desired order:
SELECT ID1, ID2
FROM
(
SELECT ID1, ID2, ID1 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 <= ID2 OR ID2 IS NULL
UNION ALL
SELECT ID1, ID2, ID2 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 > ID2 OR ID1 IS NULL
) q
ORDER BY ORDERING_COLUMN;
db fiddle
answered Apr 10 at 0:08
Joe ObbishJoe Obbish
21.9k43291
21.9k43291
Thank you so much. You are AWESOME!! :D
– Liliana del Carmen Castellanos
2 days ago
This doesn't quite work, if you reorder your input data from(313, 311), (314, 311)
to(314, 311),(313, 311)
it comes out in the wrong order, I suggest updating the order by statement to beORDER BY ORDERING_COLUMN, ID1
to fix that
– Xynos
2 days ago
@Xynos feel free to edit
– Joe Obbish
2 days ago
add a comment |
Thank you so much. You are AWESOME!! :D
– Liliana del Carmen Castellanos
2 days ago
This doesn't quite work, if you reorder your input data from(313, 311), (314, 311)
to(314, 311),(313, 311)
it comes out in the wrong order, I suggest updating the order by statement to beORDER BY ORDERING_COLUMN, ID1
to fix that
– Xynos
2 days ago
@Xynos feel free to edit
– Joe Obbish
2 days ago
Thank you so much. You are AWESOME!! :D
– Liliana del Carmen Castellanos
2 days ago
Thank you so much. You are AWESOME!! :D
– Liliana del Carmen Castellanos
2 days ago
This doesn't quite work, if you reorder your input data from
(313, 311), (314, 311)
to (314, 311),(313, 311)
it comes out in the wrong order, I suggest updating the order by statement to be ORDER BY ORDERING_COLUMN, ID1
to fix that– Xynos
2 days ago
This doesn't quite work, if you reorder your input data from
(313, 311), (314, 311)
to (314, 311),(313, 311)
it comes out in the wrong order, I suggest updating the order by statement to be ORDER BY ORDERING_COLUMN, ID1
to fix that– Xynos
2 days ago
@Xynos feel free to edit
– Joe Obbish
2 days ago
@Xynos feel free to edit
– Joe Obbish
2 days ago
add a comment |
Stealing the sql fiddle table from Joe Obbish this is a simple solution
SELECT * FROM dbo.WEIRD_ORDERING
ORDER BY coalesce(ID2*1000+1, ID1*1000)
New contributor
add a comment |
Stealing the sql fiddle table from Joe Obbish this is a simple solution
SELECT * FROM dbo.WEIRD_ORDERING
ORDER BY coalesce(ID2*1000+1, ID1*1000)
New contributor
add a comment |
Stealing the sql fiddle table from Joe Obbish this is a simple solution
SELECT * FROM dbo.WEIRD_ORDERING
ORDER BY coalesce(ID2*1000+1, ID1*1000)
New contributor
Stealing the sql fiddle table from Joe Obbish this is a simple solution
SELECT * FROM dbo.WEIRD_ORDERING
ORDER BY coalesce(ID2*1000+1, ID1*1000)
New contributor
New contributor
answered 2 days ago
SpacebenSpaceben
311
311
New contributor
New contributor
add a comment |
add a comment |
SELECT *
FROM datatable
ORDER BY CASE WHEN field2 IS NULL THEN field1 ELSE field2 END, -- sort groups
CASE WHEN field2 IS NULL THEN 1 ELSE 2 END, -- move parent first
field2 -- sort childs
add a comment |
SELECT *
FROM datatable
ORDER BY CASE WHEN field2 IS NULL THEN field1 ELSE field2 END, -- sort groups
CASE WHEN field2 IS NULL THEN 1 ELSE 2 END, -- move parent first
field2 -- sort childs
add a comment |
SELECT *
FROM datatable
ORDER BY CASE WHEN field2 IS NULL THEN field1 ELSE field2 END, -- sort groups
CASE WHEN field2 IS NULL THEN 1 ELSE 2 END, -- move parent first
field2 -- sort childs
SELECT *
FROM datatable
ORDER BY CASE WHEN field2 IS NULL THEN field1 ELSE field2 END, -- sort groups
CASE WHEN field2 IS NULL THEN 1 ELSE 2 END, -- move parent first
field2 -- sort childs
answered Apr 10 at 4:53
AkinaAkina
4,9821311
4,9821311
add a comment |
add a comment |
All answers so far rely on an assumption that there are no further levels of "generated from" (e.g. there is no 382 generated from the 381 which is itself generated from 352 - or which was it).
They should know what is said of "assume", so they should have asked you about this first.
If you can indeed have further levels of "generated from", then you need a recursive query to do the full path construction ("352" , "352/381" , "352/381/382" , etc etc) and ORDER BY that full path.
add a comment |
All answers so far rely on an assumption that there are no further levels of "generated from" (e.g. there is no 382 generated from the 381 which is itself generated from 352 - or which was it).
They should know what is said of "assume", so they should have asked you about this first.
If you can indeed have further levels of "generated from", then you need a recursive query to do the full path construction ("352" , "352/381" , "352/381/382" , etc etc) and ORDER BY that full path.
add a comment |
All answers so far rely on an assumption that there are no further levels of "generated from" (e.g. there is no 382 generated from the 381 which is itself generated from 352 - or which was it).
They should know what is said of "assume", so they should have asked you about this first.
If you can indeed have further levels of "generated from", then you need a recursive query to do the full path construction ("352" , "352/381" , "352/381/382" , etc etc) and ORDER BY that full path.
All answers so far rely on an assumption that there are no further levels of "generated from" (e.g. there is no 382 generated from the 381 which is itself generated from 352 - or which was it).
They should know what is said of "assume", so they should have asked you about this first.
If you can indeed have further levels of "generated from", then you need a recursive query to do the full path construction ("352" , "352/381" , "352/381/382" , etc etc) and ORDER BY that full path.
answered 2 days ago
Erwin SmoutErwin Smout
1,411712
1,411712
add a comment |
add a comment |
Liliana del Carmen Castellanos is a new contributor. Be nice, and check out our Code of Conduct.
Liliana del Carmen Castellanos is a new contributor. Be nice, and check out our Code of Conduct.
Liliana del Carmen Castellanos is a new contributor. Be nice, and check out our Code of Conduct.
Liliana del Carmen Castellanos is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Database Administrators Stack Exchange!
- 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%2fdba.stackexchange.com%2fquestions%2f234368%2forder-table-by-two-columns%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