3

以下は私の大規模なSQLクエリの一部であり、何時間も費やした後、問題の解決策を見つけることができませんでした. 私の要件は、RaceNumber の昇順でレコードを並べ替え、null レコードを一番下に配置することだけです

SELECT DISTINCT TP.racenumber, 
                TP.teamid, 
                TP.teamname 
FROM   tblteamprofile TP 
ORDER  BY CASE 
            WHEN TP.racenumber IS NULL THEN 1 
            ELSE 0 
          end, 
          TP.teamid, 
          TP.teamname 

誰か助けてくれませんか、それは私のささやかなお願いです...!お願いします

4

3 に答える 3

12

欠落している ORDER BY 項目を SELECT リストに追加します。

SELECT DISTINCT   
  TP.RaceNumber, 
  CASE WHEN TP.RaceNumber is null THEN 1 ELSE 0 END, 
  TP.TeamID,     
  TP.TeamName     
FROM 
  tblTeamProfile TP 
ORDER BY 
  CASE WHEN TP.RaceNumber is null THEN 1 ELSE 0 END,
  TP.TeamID,
  TP.TeamName

Factor Mystic がコメントで鋭く指摘しているように、RDBMS で ORDER BY 句でエイリアスを再利用できる場合は、クエリを簡素化できます。

SELECT DISTINCT   
  TP.RaceNumber, 
  CASE WHEN TP.RaceNumber is null THEN 1 ELSE 0 END AS RaceNumberFlag, 
  TP.TeamID,     
  TP.TeamName     
FROM 
  tblTeamProfile TP 
ORDER BY 
  RaceNumberFlag,
  TP.TeamID,
  TP.TeamName
于 2013-02-21T16:27:20.223 に答える
3

問題は、特定の値がクエリのSELECTリストに含まれていない場合、データベース エンジンがその特定の値を選択する方法を認識していないことです。SELECT DISTINCT

列を選択したくない場合は、GROUP BY代わりにa を使用できるはずです。DISTINCT

SELECT TP.racenumber, TP.teamid, TP.teamname 
FROM tblteamprofile TP 
GROUP BY TP.racenumber, TP.teamid, TP.teamname, 
    CASE WHEN TP.racenumber IS NULL THEN 1 ELSE 0 END
ORDER BY CASE WHEN TP.racenumber IS NULL THEN 1 ELSE 0 END, 
    TP.teamid, TP.teamname 
于 2013-02-21T16:30:10.543 に答える
0

おそらく、順序は次のようになります。

order by (case when tp.RaceNumber is NULL then 1 else 0 end),
         tp.RaceNumber

RaceNumber で注文したいのに、クエリに TeamId と TeamName があるのはなぜですか?

于 2013-02-21T16:27:51.793 に答える