SQL Server:如何使用起始值进行排序

时间:2015-07-09 18:28:25

标签: sql sql-server

查询按照从某个值开始的值对表进行排序。

电流:

ZQE123
ABC123
ABC324
ALP234

如果我从变量'ABC324'

订购
ABC324
ALP234
ZQE123
ABC123

如果我从变量'ZZZ123'

订购
ABC123
ABC324
ALP234
ZQE123

它基本上是一个有序的循环列表,具体取决于指定的变量。

我尝试过使用RANK()功能,但没有太多运气。

SELECT 
    Location, 
    RANK() OVER (ORDER BY Location) 
FROM Table1

输出:

ZQE123    4 
ABC123    1
ABC324    2 
ALP234    3

如何根据当前位置进行操作?

2 个答案:

答案 0 :(得分:7)

public class TblManagement extends JInternalFrame {


JList<String> lastListSelected = null;
    .
    .

    public TblManagement(JDesktopPane desk) {

    MouseInputAdapter listMouseHandler = new ListMouseHandler();

    // create JLists.
    columnslist[i].addMouseListener(listMouseHandler);

    }

    private class ListMouseHandler extends MouseInputAdapter {

    public void mouseClicked(MouseEvent e) {

        JList<String> currentListSelected = (JList<String>) e.getSource();

        int selectedIndex = currentListSelected.getSelectedIndex();
        String selectedValue = currentListSelected.getModel().getElementAt(selectedIndex);

        //System.out.println(selectedValue);

        clearSelections(mainPanel, currentListSelected, lastListSelected);
        lastListSelected = currentListSelected;
        System.out.println(lastListSelected.getModel().getElementAt(0));

    }
}

        void clearSelections(Container container, JList currentListSelected, JList lastListSelected) {

    for (Component c : container.getComponents()) {
        if (c instanceof JList) {
            if ( c != lastListSelected && c != currentListSelected) {
             System.out.println("JList found");
             ((JList) c).clearSelection();

            }
        }

        else
            if (c instanceof Container) {
               clearSelections((Container)c, currentListSelected, lastListSelected);
            }
    }
}

将是一种方式。或另一个(假设没有空值)

ORDER  BY CASE
            WHEN YourCol >= @Variable THEN 0
            ELSE 1
          END,
          YourCol 

答案 1 :(得分:1)

只是另一种选择,虽然我喜欢 Martin Smith 的回答:

DECLARE @Start CHAR(6) = 'ABC324';

DECLARE @T TABLE (Val CHAR(6));
INSERT INTO @T VALUES ('ZQE123'), ('ABC123'), ('ABC324'), ('ALP234');

DECLARE @Count INT;
SELECT @Count = COUNT(1) FROM @T;


;WITH Ranked AS
(
    SELECT *, RANK() OVER (ORDER BY Val) Ord FROM @T
)
SELECT Val FROM Ranked
ORDER BY CASE WHEN Val >= @Start THEN Ord ELSE Ord + @Count END;