2017-09-05 119 views
0

輸入和所希望的輸出如下所示SQL服務器:基於

輸入ID列進行排序的值

id Msg res time 
-------------------- 
1 a1 8 11:14:00 
1 qq 8 11:15:00 
1 d1 8 11:16:00 
1 e1 8 11:17:00 
1 f1 8 11:18:00 
1 h 4 11:19:00 
1 i 4 11:20:00 
1 m35 4 11:21:00 
1 n 4 11:22:00 
1 o 4 11:23:00 
1 p0 4 11:23:00 
2 a1 4 11:24:00 
2 p0 4 11:25:00 
2 qq 4 11:26:00 
2 c 4 11:27:00 
2 h 4 11:28:00 
2 o 4 11:29:00 
3 c 4 11:30:00 
3 qq 4 11:31:00 
3 e1 4 11:32:00 

希望的輸出:

id Msg res time 
--------------------- 
1 a1 8 11:14:00 
1 d1 8 11:16:00 
1 e1 8 11:17:00 
1 f1 8 11:18:00 
1 h 4 11:19:00 
1 i 4 11:20:00 
1 p0 4 11:24:00 
1 qq 8 11:15:00 
1 m35 4 11:21:00 
1 n 4 11:23:00 
1 o 4 11:22:00 
2 a1 4 11:24:00 
2 c 4 11:27:00 
2 h 4 11:28:00 
2 p0 4 11:25:00 
2 qq 4 11:26:00 
2 o 4 11:29:00 
3 c 4 11:30:00 
3 e1 4 11:32:00 
3 qq 4 11:31:00 

的代碼是下面

CREATE TABLE k (id int, Msg varchar(1000), result int, time time); 

INSERT INTO k VALUES (‘1’, ‘a1’, ‘8’, ‘11:14:00’) 
INSERT INTO k VALUES (‘1’, ‘qq’, ‘8’, ‘11:15:00’) 
INSERT INTO k VALUES (‘1’, ‘d1’, ‘8’, ‘11:16:00’) 
INSERT INTO k VALUES (‘1’, ‘e1’, ‘8’, ‘11:17:00’) 
INSERT INTO k VALUES (‘1’, ‘f1’, ‘8’, ‘11:18:00’) 
INSERT INTO k VALUES (‘1’, ‘h’, ‘4’, ‘11:19:00’) 
INSERT INTO k VALUES (‘1’, ‘i’, ‘4’, ‘11:20:00’) 
INSERT INTO k VALUES (‘1’, ‘m35’, ‘4’, ‘11:21:00’) 
INSERT INTO k VALUES (‘1’, ‘n’, ‘4’, ‘11:22:00’) 
INSERT INTO k VALUES (‘1’, ‘o’, ‘4’, ‘11:23:00’) 
INSERT INTO k VALUES (‘1’, ‘p0’, ‘4’, ‘11:23:00’) 
INSERT INTO k VALUES (‘2’, ‘a1’, ‘4’, ‘11:24:00’) 
INSERT INTO k VALUES (‘2’, ‘p0’, ‘4’, ‘11:25:00’) 
INSERT INTO k VALUES (‘2’, ‘qq’, ‘4’, ‘11:26:00’) 
INSERT INTO k VALUES (‘2’, ‘c’, ‘4’, ‘11:27:00’) 
INSERT INTO k VALUES (‘2’, ‘h’, ‘4’, ‘11:28:00’) 
INSERT INTO k VALUES (‘2’, ‘o’, ‘4’, ‘11:29:00’) 
INSERT INTO k VALUES (‘3’, ‘c’, ‘4’, ‘11:30:00’) 
INSERT INTO k VALUES (‘3’, ‘qq’, ‘4’, ‘11:31:00’) 
INSERT INTO k VALUES (‘3’, ‘e1’, ‘4’, ‘11:32:00’) 

select * 
from k 
order by 
    case 
     when Msg = ‘a1’ or Msg = ‘b1’ or Msg = ‘b0’ or Msg = ‘c’ or Msg = ‘d1’ or Msg = ‘e1’ or Msg = ‘f1’ or Msg = ‘g’ or Msg = ‘h’ or Msg = ‘i’ then 1 
     when Msg = ‘p0’ then 2 
     when Msg = ‘p1’ then 3 
     when Msg = ‘qq’ then 4 
     when Msg = ‘i’ then 5 
     when Msg = ‘j’ then 6 
     when Msg = ‘k0’ then 7 
     when Msg = ‘k1’ then 8 
     when Msg = ‘l’ then 9 
     when Msg = ‘l1’ then 10 
     else 11 
    end, Msg 

但是這段代碼沒有返回所需的輸出。如果'id'列中只有一組值,則根據代碼中給出的條件對'Msg'列進行相應的排序。但是在樣本輸入中,'id'列(1,2和3)中有3組不同的值。所以當我執行上面的代碼時,對整個數據進行排序。很明顯,因爲我沒有給出'id'列分組的條件。有沒有解決方案來達到預期的效果? (另外我試圖通過使用遊標來獲取輸入表中的每一行,但即使在那裏我也無法正確地將條件放入循環中)。任何幫助都會有用。

回答

0

這是你在找什麼:

select * from k order by id, Msg 

基本上,你已經有了「身份證」列的值,你要訂購兩列,第一個ID,然後該消息的結果;意味着id中具有相同值的行將按Msg的值排序。