【问题标题】:ORDER BY in SQL Server 2008SQL Server 2008 中的 ORDER BY
【发布时间】:2014-10-16 15:34:54
【问题描述】:

目前在表格中我有以下数据

排序 | QUESTION_SORT -------------------------------------------------- -------- 1 | 0 2 | 0 3 | 0 4 | 0 5 | 1 5 | 2 5 | 3 6 | 1 6 | 2 6 | 3 7 | 1 7 | 2 7 | 3 8 | 1 8 | 2 9 | 0 10 | 0

我希望根据以下标准输出如下格式:

我想对列 SORT 始终应用排序

1) 如果QUESTION_SORT 列的值为0,则执行仅排序

2) 如果列QUESTION_SORT 的值为非零,则使用GROUP BYQUESTION_SORT 进行排序

排序 | QUESTION_SORT -------------------------------------------------- -------- 1 | 0 2 | 0 3 | 0 4 | 0 5 | 1 6 | 1 7 | 1 8 | 1 5 | 2 6 | 2 7 | 2 8 | 2 5 | 3 6 | 3 7 | 3 9 | 0 10 | 0

编辑:

我已经尝试了 Lamak 建议的解决方案,但它跳过了值为 2 或 3 的记录作为QUESTION_SORT

查询:

    Declare @TmpQuest table (Sort int , QUESTION_SORT int)
insert into @TmpQuest values (1   , 0)
insert into @TmpQuest values (2   , 0)
insert into @TmpQuest values (3   , 0)
insert into @TmpQuest values (4   , 0)
insert into @TmpQuest values (5   , 1)
insert into @TmpQuest values (5   , 2)
insert into @TmpQuest values (5   , 3)   
insert into @TmpQuest values (6   , 1)
insert into @TmpQuest values (6   , 2)
insert into @TmpQuest values (6   , 3)
insert into @TmpQuest values (7   , 1)
insert into @TmpQuest values (7   , 2)
insert into @TmpQuest values (7   , 3)
insert into @TmpQuest values (8   , 1)
insert into @TmpQuest values (8   , 2)
insert into @TmpQuest values (9   , 0)
insert into @TmpQuest values (10  , 0)

SELECT 
    [Sort], MIN(QUESTION_SORT) QUESTION_SORT 
FROM @TmpQuest 
GROUP BY [SORT]

输出:

Sort    QUESTION_SORT

1   0
2   0
3   0
4   0
5   1
6   1
7   1
8   1
9   0
10  0

【问题讨论】:

  • 你有没有尝试过?
  • @Mihai 不会把 9 和 10 放在最后。
  • 您对所需的排序顺序有什么标准?
  • 这是 SORT 9 和 10 的值让我感到困惑 - 我希望它们在 4 之后列出 | 0 和之前 1 | 5
  • 无论如何,你似乎想要:SELECT [SORT], MIN(QUESTION_SORT) QUESTION_SORT FROM YourTable GROUP BY [SORT]

标签: sql sql-server sql-server-2008 sorting sql-order-by


【解决方案1】:

我如何根据我的必需输出解决我的查询,还可以更改 Sql Fiddle 中的查询以获得所需的输出:Sql fiddle query

查询:

SELECT sort, 
       question_sort, 
       (SELECT Min(TMP1.sort) + ( tmpquest.question_sort * 0.005 ) 
        FROM   tmpquest TMP1 
        WHERE  Tmp1.question_sort = tmpquest.question_sort 
        GROUP  BY TMP1.question_sort) AS MinValByGrp 
FROM   tmpquest 
ORDER  BY CASE 
            WHEN question_sort = 0 THEN sort 
            ELSE minvalbygrp 
          END, 
          sort 

输出:

SORT    QUESTION_SORT   
1         0 
2         0 
3         0 
4         0         
6         1 
7         1 
8         1 
5         2 
6         2 
7         2 
8         2 
5         3 
6         3 
7         3 
9         0 
10        0 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2016-02-16
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多