2017-10-18 18 views
0

私はsalesという名前のテーブルを持っています。この表に私は列Invoice_Numberを持っています。私が達成したいのは、インボイス番号をアルファベット順に、つまり1つの静的な文字とA1、A2、A3などのように変化する番号で取得することです。私は、例の残りの部分で見たように、AからBに変更したくありません。MSSQLを使用した英数字請求書番号の順次インクリメント

私はこのクエリによって、数値の増分を取得することができます:

Select IsNull(MAX([Invoice_Number] + 1), 1) from sales 

しかし、それは、それより前のアルファベットを追加することはできません。

ありがとうございました。

+0

あなたはこれを自分にしたくありません。競合状態を作成しています。請求先番号の前に「A」を付ける必要があるのはなぜですか?それがAでデータベースに格納されているかどうかは本当に重要ですか?請求書やその他の連絡のためにその手紙を貼り付けることはできませんでしたか?または計算列を使用してAを前面に追加します。 –

答えて

0

varcharを返すようにキャストを使用してみてください。これが役立つかどうかを教えてください:)。

SELECT 'A' + CAST(ISNULL(MAX([Invoice_Number] + 1), 1) AS nvarchar) FROM sales 
1

あなたはシードとして、既存のidentity columnを使用することができます。これをcomputed columnと組み合わせてInvoiceNumberに返す。

-- Combine a seed with a computed column. 
CREATE TABLE #Example 
(
    Seed   INT IDENTITY(1,1), 
    InvoiceNumber AS 'A' + CAST(Seed AS VARCHAR(5)), 
    Customer  VARCHAR(25) 
); 

-- Add some sample records. 
INSERT INTO #Example 
(
    Customer 
) 
VALUES 

    ('A PLC'), 
    ('B PLC'), 
    ('C LTD') 
; 

-- Returns InvoiceNumbers A1, A2 & A3. 
SELECT 
    * 
FROM 
    #Example 
; 
+0

または、請求書番号に穴が開いてしまうのを防ぐには、別のシーケンスを作成することができます。ドラフトレコードが削除されたとき。 CREATE SEQUENCE InvoiceCounter START WITH 1 INCREMENT BY 1; GO 「A」+キャスト(InvoiceCounterの次の値はnvarchar)を選択します。 – Reno

関連する問題