2017-06-03 78 views
1

我有一個表是這樣的(這裏是一個簡化版本):更改訂單

create table t(
    id integer primary key auto_increment, 
    room varchar(10), 
    kind char(1), 
    value double 
); 

insert into t(room,kind,value) values 
    ('009','T',23), 
    ('009','H',35), 
    ('All','P',740), 
    ('008','T',22), 
    ('008','H',35), 
    ('106','T',22), 
    ('106','H',38), 
    ('006','H',40), 
    ('006','T',25), 
    ('All','P',740); 

當我選擇roomkind,它給了我行在出現的順序:

select distinct room, kind from t; 

| room | kind | 
|------|------| 
| 009 | T | 
| 009 | H | 
| All | P | 
| 008 | T | 
| 008 | H | 
| 106 | T | 
| 106 | H | 
| 006 | H | 
| 006 | T | 

我想要的結果是這樣的:

| room | kind | 
|--------|------| 
| room1 | T | 
| room1 | H | 
| room2 | T | 
| room2 | H | 
................ 
| All | P | <-- this should be the last row 

即每一個房間應^ h大寫'T'然後'H',最後一行應該有'全部'的空間。是否有可能做到這一點而不做複雜的查詢?

回答

1

我認爲你只是在尋找order by

select distinct room, kind 
from t 
order by (room = 'All') asc, -- put 'All' last 
     room, kind desc; 

爲什麼這項工作? MySQL將一個布爾表達式(如(room = 'All'))視爲一個數字,其中1表示true,0表示false。因此,「真」值按「假」值排序。

注意:您的數據似乎沒有重複值爲room/kind的行。如果您沒有重複項,請使用select而不是select distinct

+0

這會很好,但'kind'的順序應該是'T,H'。 –

+0

@MichaelO。 。 。 。只需使用'kind desc'而不是'kind'。 –

+0

謝謝,它的工作原理。 –

0

簡單

select distinct kind,room from t; 
0

每一個與數字開頭,例如「01」,「54154A」總是小於字符串,它與「A」字符,例如「ALL」開始串

嘗試

select distinct room, kind from t order by room