2

私は次の声明を持っています

SELECT id, descr from mytable 

返す

1、'Test1'
4、'Test4'
6、'Test6'
8、'Test8'
22、'Test22'

ここで、最初の 4 つの結果に連続した文字を追加するように表示したい...

'A', 1, 'Test1'
'B', 4,
'Test4' 'C', 6, 'Test6'
'D', 8, 'Test8'
'',22, 'Test22'

考え?

編集:可能であれば、SQL Server 2000 の例を好むでしょう。

4

2 に答える 2

4
SELECT CASE WHEN ROWNUMBER < 4
           THEN CHAR(65 + ROWNUMBER - 1)
           ELSE ''
       AS <WHATEVER>
       ,X.id
       ,X.descr
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY <WHATEVER>) AS ROWNUMBER
        ,id
        ,descr
    FROM mytable
) AS X

これは SQL Server 2005 以降です。

SQL Server 2000 の場合 (id がソート順で一意であると仮定):

SELECT CASE WHEN rownumbers.rownumber < 4
           THEN CHAR(65 + rownumbers.rownumber - 1)
           ELSE ''
       AS <WHATEVER>
       ,mytable.id
       ,mytable.descr
FROM (
    SELECT l.id, COUNT(*) AS rownumber
    FROM mytable AS l
    LEFT JOIN mytable AS r
        ON l.id >= r.id
    GROUP BY l.id
) AS rownumbers
INNER JOIN mytable
    ON mytable.id = rownumbers.id
于 2009-01-27T16:48:53.453 に答える
0

SQL Server 2000 では、単一の select ステートメントでこれを行うことはできません。SQL Server 2000 には ROWNUM ステートメントがありません。

一時テーブルを使用する場合は、IDENTITY 関数を使用できます。

SELECT IDENTITY(int,1,1) rownum, 
       id, 
       descr 
INTO #mytable 
from mytable

SELECT CASE WHEN ROWNUMBER < 4
       THEN CHAR(65 + ROWNUMBER - 1)
       ELSE ''
   AS <WHATEVER>
   ,X.id
   ,X.descr
FROM #mytable X
ORDER BY rownum

注: IDENTITY 関数は、SELECT INTO ステートメントでのみ使用できます。

于 2009-01-27T17:15:05.740 に答える