2017-09-20 9 views
1

私は、一連の結果を返す基本的なSQL選択クエリを実行しています。私はエントリ "料金"の結果の上に置かれる特定の行、その後、残りのしたい。以下のようなMySQLは、結果の先頭に特定の行を入れます。

何か:

SELECT * FROM tbl ORDER By Charges = Fee DESC, Charges DESC 

は誰が助けることはできますか?

+0

としては、答えとして例示して説明: 'FIELD(有料、 '手数料')でTBLのORDER SELECT * FROM DESC' – MrMarlow

答えて

1

SELECT * from tbl ORDER BY CASE WHEN Charges = 'Fee' THEN 0 ELSE 1 END, Charges DESC; 
0

UNIONクエリを使用すると思います。 ORDER BYは、私が知る限り、この種のものをデフォルトでサポートしていません。

このような何か:あなたはこの試みることができる

SELECT * FROM tbl WHERE Charges = 'Fee' 
UNION 
SELECT * FROM tbl ORDER BY Charges DESC 
0

をあなたは、最初の者によって注文うFIELD属性、とORDER BYを使用しなければならないでしょう。

私はあなたのテーブル定義を持っていないので、私はそれが消えるのために、ここで一緒にhttp://sqlfiddle.com/#!9/91376/13

を1を投げてい、スクリプトはかなりで構成されています。

CREATE TABLE IF NOT EXISTS `tbl` (
    `id` int(6) unsigned AUTO_INCREMENT, 
    `Name` char(6) not null, 
    `Charges` char(10) NOT NULL, 
    PRIMARY KEY (`id`) 
) DEFAULT CHARSET=utf8; 

INSERT INTO `tbl` (`Name`, `Charges`) 
    VALUES ('One', 'Fee'), ('Two', 'Charge'), ('Three', 'Charge'), 
      ('Four', 'Charge'), ('Five', 'Fee'), ('Six', 'Fee'), 
      ('Seven', 'Invoice'), ('Eight', 'Fee'), ('Nine', 'Invoice'), 
      ('Ten', 'Invoice'); 

    SELECT * 
     FROM tbl 
    ORDER BY FIELD(`Charges`, 'Charge') DESC 
      ; 

返す:だから

id Name Charges 
2 Two Charge 
3 Three Charge 
4 Four Charge 
1 One Fee 
9 Nine Invoice 
8 Eight Fee 
7 Seven Invoice 
6 Six Fee 
5 Five Fee 
10 Ten Invoice 

、直接あなたの質問に答えるために、あなたのクエリは次のようになります。

SELECT * 
    FROM tbl 
ORDER BY FIELD(Charges, 'Fee') DESC 

編集:ここCharges = Feeによって並べ替え表示可能、:http://sqlfiddle.com/#!9/91376/15

関連する問題