2016-04-02 80 views
0

我創建了一個表,tblNewParts 3列:SQL服務器:選擇......從FULL JOIN具有默認值的列

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當我運行查詢。問題是,當沒有在新表中的任何記錄,我得到NULL的,而不是'N'秒。

我看到一個SELECT CASE WHEN col1 IS NULL THEN defaultval ELSE col1 ENDhere一個主要適用答案。我想知道這是否會在這種情況下工作,以及如何在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代碼放置到[CustPN]如果[NewCustPart]是零,它把一個'N'到現場[Handled]如果是零,並將其分配日期到[AddedDate]領域。它也只返回尚未處理的記錄,以便獲得需要查看的記錄;並通過[NewCustPart]字段值對結果輸出進行排序。

,輸出結果是這樣的:(我縮短了日期時間的輸出在這裏。)

[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