2016-04-02 7 views
0

のデフォルト値を登録しよう3列のtblNewPartsSQL Serverの:選択... FULLでから、私はテーブルを作成した列

NewCustPart 
AddedDate 
Handled 

と私は既存のテーブルにFULL JOINにそれをしようとしています、 tblPartsWorkedOntblNewParts

... 'N'に不履行取扱たと

SELECT * 
FROM dbo.tblPartsWorkedOn AS BASE 
FULL JOIN dbo.tblNewParts AS ADDON ON BASE.[CustPN] = ADDON.[NewCustPart] 
WHERE ADDON.[Handled] IS NULL 
ORDER BY [CustPN] DESC 
を定義し、私は、クエリを実行すると、フィールド [Handled]'N'代わりの NULLとして戻って来てほしいです。問題は、新しいテーブルにレコードがない場合、 'N'の代わりに NULLが得られるということです。

hereから最も適切な回答はSELECT CASE WHEN col1 IS NULL THEN defaultval ELSE col1 ENDです。私はこれがこのインスタンスではうまくいくのだろうと思っています.SQL Server 2012のT-SQLではどうすればいいですか?私は両方のテーブルからすべての列を必要とするのではなく、両方のテーブルから。

私は元のリンクの質問をあいまいにしないように、引用されたリンクのコメントではなく、これを質問にしています。

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

+1

このソリューションをお試しいただきありがとうございます。 –

+0

@IvanStarostinはまだ完全にプログラミング言語ではないため、SQLをかなり新しくして壁を打っているので、私は助けを求めてから、やってみることにしました。私は今、私のために働くように私の "答え"を掲示しました、そして、私はそれが典型的なSQLプログラマとしてではなく、私のように思える他の人にとどまることを望んでいます。 :D – Michieal

+1

'ISNULL'と' COALESCE'関数の使い方のデモンストレーションでもう少し答えを投稿してください。 –

答えて

0

多くの繰り返しの後、私は答えを見つけた、それはかさばるのですが、ここにはとにかくです。形式:

はい、CASE文は機能しますが、出力は名前のない列として出力されます。また、この例では元の列と修正された列をすべて取得するために、私はSELECT *, CASE...END as [ColumnName]を使用しなければなりませんでした。

ただし、テーブルの末尾に列を追加してその列を呼び出すのではなく、正しい列に情報を配置するため、より良い解決方法があります。'Unnamed Column'

Select [ID], [Seq], [Shipped], [InternalPN], [CustPN], [Line], [Status], 
     CASE WHEN ADDON.[NewCustPart] IS NULL THEN BASE.[CustPN] ELSE 
      ADDON.[NewCustomerPart] END as [NewCustPart], 
     GetDate() as [AddedDate], 
     CASE WHEN ADDON.[Handled] IS NULL THEN 'N' ELSE ADDON.[Handled] END as [Handled] 

     from dbo.tblPartsWorkedOn as BASE 
     full join dbo.tblNewParts as AddOn ON Base.[CustPN] = AddOn.NewCustPart 

     where AddOn.Handled = 'N' or AddOn.Handled is null 
     order by [NewCustPart] desc 

このSQLコードは、それがnullだ場合、それがnullだと、それは[AddedDate]フィールドに日付を割り当てた場合、それはフィールド[Handled]'N'を置く[NewCustPart][CustPN]を配置します。また、処理されていないレコードだけを返すので、参照する必要があるレコードを取得できます。結果の出力を[NewCustPart]フィールド値で指定します。

結果の出力は次のようになります(私はここで、出力用のDateTimeを短縮。)

[ID] [SEQ] [Shipped] [InternalPN] [CustPN] [Status] [NewCustPart] [AddedDate] [Handled] 
1  12  N   10012A   10012A  UP   10012A   04/02/2016 N 
... 
ヌルよりもむしろ

[ID] [SEQ] [Shipped] [InternalPN] [CustPN] [Status] [NewCustPart] [AddedDate] [Handled] 
1  12  N   10012A   10012A  UP   NULL   NULL   NULL 
... 

私はこれを残していると、誰かが最終的にこの同じ質問をしてくれると確信しているからです。どのようにして何が行われたのかを示す多くの例が、すべてが一般化できるわけではないので、非常に有益なことだと思います。ちょうどいくつかの考えと私はこれが他の人に役立つことを願っています!

1

select文の中にカラム名(alias.column_name)を指定し、ISNULL(alias.column、 'N')を使用します。

ありがとうございました

+0

さらに例を挙げてこれを説明できますか?近いうちにたくさんのT-SQLを使用する予定なので、これを私がやっていることに合わせる方法を知りたいです!ありがとうございました!!! – Michieal

関連する問題