2016-03-31 5 views
1
CREATE TABLE tbl_Patient 
    (
    PatientID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 
    LabControlID AS Cast(Right(Year(getDate()),4) as varchar(4)) +'-' + RIGHT('00000' + CAST(PatientID AS VARCHAR(5)), 5), 
    SequenceID AS "--Codes to display date--" 
    ,First_Name varchar(50) 
    ,Last_Name varchar(50) 
    ,Age int 
    ,Male bit 
    ,Female bit 
    , 
) 

月と日 - 00000を表示したい場合は、次のように表示します。テーブルの列に日付を表​​示したい

SequenceID 
---------- 
Jan01-00001  
Jan01-00002 

助言してください。ありがとう:D

+0

なぜそれをしたいですか?どのユースケースですか?それを知らずに、計算列を持つことは私が示唆できる唯一の選択肢です。これは日付と身元の列に基づいています – FLICKER

+0

年間に何人の患者がいますか? 'PatientID'が10万に達すると、あなたは引退するか、他の場所に行きますか? – HABO

答えて

7

あなたのテーブル構造を再考する必要があります

  1. Ageを格納することは、直接(あなたが毎年それを更新します)注意が必要です。 birthdayを保存して計算する必要があります。
  2. なぜ2つのフィールドがセックスを示していますか? Male bitおよびFemale bitである。チェック制約がなければ、male 1 and female 1を得ることができます。たぶんちょうどisMale bitか、必要に応じてより多くの値を持つルックアップテーブルになります。
  3. LabControlIDGETDATEを使用していますが、時間によって異なります。年が変わると変わるでしょう。

SequenceId用として、あなたはFORMATを使用することができ、通常の列としてdateを格納します。

CREATE TABLE tbl_Patient 
(
    PatientID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 
    my_date DATE, 
    SequenceID AS CONCAT(FORMAT(my_date,'MMMdd','en-US'),'-',FORMAT(PatientID,'0000#')) 
    -- ... 
); 

INSERT INTO tbl_Patient(my_date)VALUES ('2016-01-01'), ('2016-01-01'); 

SELECT * FROM tbl_Patient; 

LiveDemo

出力:

╔═══════════╦═════════════════════╦═════════════╗ 
║ PatientID ║  my_date  ║ SequenceID ║ 
╠═══════════╬═════════════════════╬═════════════╣ 
║   1 ║ 01.01.2016 00:00:00 ║ Jan01-00001 ║ 
║   2 ║ 01.01.2016 00:00:00 ║ Jan01-00002 ║ 
╚═══════════╩═════════════════════╩═════════════╝ 
+0

こんにちは、どうやってこれに変更できますか? 1.年齢を直接格納するのは難しいです(毎年更新します)。誕生日を保存して計算する必要があります。 2.なぜ2つのフィールドがセックスを示していますか?男性ビットと女性ビット。チェック制約がなければ、男性1と女性1を得ることができます。必要に応じて、isMaleビットで十分な数のルックアップテーブルが必要になります。 –

+1

@JaphetCompendioBatucanこの答えがur問題を解決すれば、答えとしてマークしてください。だから、あなたと同じ問題を抱えている他の人が答えを知っているでしょう。別の質問がある場合は、質問を編集するか、別の投稿を作成してください。あなたがコメントで質問をすると、他人に見えにくい – Mark

関連する問題