2

このようなテーブルがあります

 CREATE TABLE [dbo].[tbl_LandRigs](
    [ID] [int] IDENTITY(700000,1) NOT NULL,
    [Company] [nvarchar](500) NULL,
    [Rig] [nvarchar](500) NULL,
    [RigType] [nvarchar](200) NULL,
    [DrawWorks] [nvarchar](500) NULL,
    [TopDrive] [nvarchar](200) NULL,
    [RotaryTable] [nvarchar](500) NULL,
    [MudPump] [nvarchar](500) NULL,
    [MaxDD] [nvarchar](50) NULL,
    [Operator] [nvarchar](500) NULL,
    [Country] [nvarchar](200) NULL,
    [Location] [nvarchar](500) NULL,
    [OPStatus] [nvarchar](200) NULL,
    [CreatedDate] [datetime] NULL,
    [CreatedByID] [int] NULL,
    [CreatedByName] [nvarchar](50) NULL,
 CONSTRAINT [PK_tbl_LandRigs] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

そして、降順で MaxDD 列からデータを取得しようとしています

SELECT  distinct "MaxDD" FROM [tbl_LandRigs] ORDER BY "MaxDD" Desc

しかし、これは次の順序でデータを返します。 ここに画像の説明を入力 私の計算によると、4000 は最初の値であり、その後に他の値が続く必要があります。しかし、この結果は私を驚かせました。

4

3 に答える 3

5

それらを text( nvarchar) として保存しているため、辞書順になります。つまり、すべての文字が左から右に比較されます。したがって4000、よりも「高い」です30000(最初の 4 は既に 3 よりも高いため、最後の 0 は問題ではありません)。

したがって、正しい方法は、数値として格納することです。ただし、 のような値も使用しているため、それは不可能のよう16.000 with 4.1/2"DPです。次に、別の列を追加します。1 つは並べ替えたい数値用で、もう 1 つはテキスト表現用です。

于 2013-08-27T08:56:43.140 に答える