2016-04-02 60 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