-2

SQL サーバー データベースを使用していますが、case ステートメントで苦労しています。私がやろうとしているのは、「」(空のフィールド)に等しいときに属性の連結をidフィールド(state_issue_teacher_id)に挿入することです。問題は、case ステートメントによる属性の連結によって作成される一意の ID を入力する必要がある空の ID フィールドがいくつかあることです。

ここに画像の説明を入力

上記の空の行は、last_name+first_name+gender+race_ethnicity_code+high_degree_code+position_code+assignment_code の連結で埋める必要があります。

これが私がこれまでに持っているものです:

SELECT    
        state_issue_teacher_id,
        region_code
        + county_code
        + district_code AS district_code ,
        last_name ,
        first_name ,
        assigned_fte = CASE assign_fte
                  WHEN '' THEN 0
                  ELSE CAST(assign_fte AS NUMERIC(18,
                  2))
                  END ,
        CASE WHEN state_issue_teacher_id = '' THEN 
        RTRIM([last_name]) + '_' + RTRIM([first_name]) + '_' + RTRIM([gender])
        + '_' + RTRIM([race_ethnicity_code]) + '_' + high_degree_code + '_'
        + position_code  + '_' + assignment_code
        ELSE state_issue_teacher_id
        END,
        year_time

FROM      dbo.example
4

4 に答える 4

2

そのように連結する場合、考えられる 2 つの問題を考慮する必要があります。

まず、連結しているすべてのフィールドが varchar (または nvarchar) ですか、それとも int または数値の一部ですか? データ型が varchar または nvarchar でない場合は、連結で使用するように変換する必要があります。

次に考えられる問題は、1 つ以上の値が null になる可能性があるかどうかです。null になる可能性のある値を varchar 値と結合する必要があります (通常、連結にはスペースまたは空の文字列を使用しますが、値「不明」も機能する場合があります)。 .

于 2013-04-12T21:28:11.263 に答える
1
SELECT    
    state_issue_teacher_id,
    region_code
    + county_code
    + district_code AS district_code ,
    last_name ,
    first_name ,
    assigned_fte = CASE assign_fte
              WHEN '' THEN 0
              ELSE CAST(assign_fte AS NUMERIC(18,
              2))
              END ,
    CASE WHEN state_issue_teacher_id = '' THEN 
    RTRIM(coalesce([last_name],'ValueYouUseInsteadOfNull')) + '_' + 
    RTRIM(coalesce([first_name],'ValueYouUseInsteadOfNull')) + '_' + 
    RTRIM(coalesce([gender],'ValueYouUseInsteadOfNull')) + '_' + 
    RTRIM(coalesce([race_ethnicity_code],'ValueYouUseInsteadOfNull')) + '_' + 
    coalesce(high_degree_code,'ValueYouUseInsteadOfNull') + '_' + 
    coalesce(position_code,'ValueYouUseInsteadOfNull')  + '_' + 
    coalesce(assignment_code,'ValueYouUseInsteadOfNull')
    ELSE state_issue_teacher_id
    END,
    year_time
FROM      dbo.example

おそらく、これらのフィールドのいくつかに null があります。このクエリを試してください。

于 2013-04-12T21:31:56.367 に答える
0

質問に答えてくれたみんなありがとう。以下のクエリで動作するようになりました。

SELECT    
    state_issue_teacher_id,
    region_code
    + county_code
    + district_code AS district_code ,
    last_name ,
    first_name ,
    gender,
    race_ethnicity_code,
     high_degree_code, 
    position_code,
    assignment_code,  
    assigned_fte = CASE assign_fte
              WHEN '' THEN 0
              ELSE CAST(assign_fte AS NUMERIC(18,
              2))
              END ,
    state_issue_teacher_id =
    CASE state_issue_teacher_id WHEN  '' THEN
    RTRIM([last_name]) + '_' + RTRIM([first_name]) + '_' + RTRIM([gender])
      + '_' + RTRIM([race_ethnicity_code]) + '_' + high_degree_code + '_'
      + position_code  + '_' + assignment_code
      ELSE state_issue_teacher_id
    END,
    year_time
FROM dbo.example
于 2013-04-12T21:53:26.943 に答える
-1

どうですか?:

update example
set state_issue_teacher_id = 
RTRIM([last_name]) + '_' + RTRIM([first_name]) + '_' + RTRIM([gender])
        + '_' + RTRIM([race_ethnicity_code]) + '_' + high_degree_code + '_'
        + position_code  + '_' + assignment_code
WHERE isnull(state_issue_teacher_id, '') = ''
于 2013-04-12T21:33:55.603 に答える