7

次のように、SQL サーバーに table1 という名前のテーブルがあります。

colA
-------
A123
Z123
C123
B123

次のように、1 つの SQL ステートメントを使用して結果を取得したいと考えています。

ID colA
--------
1  A123
2  Z123
3  C123
4  B123

colA の順序は、表の行の順序と同じです。並べ替える必要はありません。

どうやってするか??どうもありがとう

4

4 に答える 4

21

データを並べ替えずにID をインクリメントする必要がある場合は、次のようにします(他の行がアルファベット順でも時系列でもないため)。また、絶対に必要でない限り、一時テーブルの使用を軽蔑します。

SELECT ROW_NUMBER() OVER 
(
    ORDER BY (SELECT NULL)
) as ID, colA
FROM table1
于 2014-06-03T18:48:00.037 に答える
7

ROW_NUMBER を使用した例

             SELECT ROW_NUMBER() 
                OVER (ORDER BY colA)  AS Row, 
                colA
                FROM table1
于 2013-10-18T15:14:01.343 に答える
5

を使用してこれを試してくださいTable variable with an Identity column

colA の順序は、表の行の順序と同じです。並べ替える必要はありません。

フィドルのデモ:

declare @t table(id int identity(1,1), colA varchar(50))

--No ordering done and the same results won't be guaranteed
insert into @t select colA from Table1

select id, colA from @T

結果:

| ID | COLA |
|----|------|
|  1 | A123 |
|  2 | Z123 |
|  3 | C123 |
|  4 | B123 |
于 2013-10-18T15:25:52.157 に答える
2

動的順序条件が存在する場合の行番号の生成

select TotalCount = COUNT(U.UnitID) OVER() ,

ROW_NUMBER() over(
    order by 
     (CASE @OrderBy WHEN '1' THEN m.Title  END) ASC ,
     (CASE @OrderBy WHEN '2' THEN m.Title  END) DESC,
     (CASE @OrderBy WHEN '3' THEN Stock.Stock  END) DESC,
     (CASE @OrderBy WHEN '4' THEN Stock.Stock   END) DESC

) as RowNumber,

M.Title,U.ColorCode,U.ColorName,U.UnitID, ISNULL(Stock.Stock,0) as Stock

 from tblBuyOnlineMaster M

    inner join BuyOnlineProductUnitIn U on U.BuyOnlineID=M.BuyOnlineID 

    left join 
            ( select IT.BuyOnlineID,IT.UnitID,ISNULL(sum(IT.UnitIn),0)-ISNULL(sum(IT.UnitOut),0) as Stock 
                from [dbo].[BuyOnlineItemTransaction] IT 
                group by IT.BuyOnlineID,IT.UnitID
             ) as Stock

        on U.UnitID=Stock.UnitID


order by 
 (CASE @OrderBy WHEN '1' THEN m.Title  END) ASC ,
 (CASE @OrderBy WHEN '2' THEN m.Title  END) DESC,
 (CASE @OrderBy WHEN '3' THEN Stock.Stock  END) DESC,
 (CASE @OrderBy WHEN '4' THEN Stock.Stock   END) DESC


offset  @offsetCount rows fetch next 6 rows only 
于 2016-08-18T06:13:00.973 に答える