4

序文を書きたいのですが、これは書きませんでした。私は今日早くそれを継承し、解決策を見つけるために戦ってきました。以下のコードベースは機能しますが、平方フィートあたりのコストが数値ではなくアルファ順で返される点が異なります。

SELECT 
  CTE.Suite, CTE.Building, CS.Address, CS.City, CS.State, CTE.Tenant,
  CTE.AverageCharges, CTE.SQFT, CTE.CostSQFT, CTE.TenantType
FROM cteInvoices as CTE
   ...
ORDER BY 
  CASE @Order
       WHEN 'Suite' THEN CTE.Suite
       WHEN 'Cost' THEN cast(CTE.costSQFT as varchar)
  END

エンドケースを次のように変更しました。

 ORDER BY 
  CASE @Order
       WHEN 'Suite' THEN CTE.Suite
       WHEN 'Cost' THEN CTE.costSQFT
   END

これでコストの並べ替えが修正されましたが、Suiteで並べ替えることを選択すると、次のようになります。

  Msg 8114, Level 16, State 5, Procedure rCostSQFTcsort, Line 17
  Error converting data type varchar to numeric.

私は夕方のほとんどこれに取り組んできました、そして私が何もしていないように見えますそれを修正します-どちらかといえばそれは事態を悪化させる傾向があります。私は、2番目の目がこの問題にいくらかの光を当てることを望んでいます。

4

1 に答える 1

7

それらが同じタイプに変換できない場合は、それらを2つの別個の句に分割する必要がある場合があります。その理由はCASE、単一のデータ型の値を返す式であり、すべての潜在的なオプションによって提示されるデータ型は変換可能でなければならないためです。ない場合ELSENULL返されるので、その「ブランチ」に対してすべての行を同じ順序にします。

 ORDER BY 
  CASE @Order
       WHEN 'Suite' THEN CTE.Suite END,
  CASE @Order
       WHEN 'Cost' THEN CTE.costSQFT END;

これらのいずれかを明示的に変換できる可能性がありますが、その意味が変わる可能性があります(たとえば、後で並べ替えたい場合は11.0両方を文字列に変換しても意味が変わりません。 9.0

于 2012-09-19T23:11:10.347 に答える