将列中的数据合并为一列

Posted

技术标签:

【中文标题】将列中的数据合并为一列【英文标题】:Merge data from columns into one column 【发布时间】:2013-08-05 21:42:56 【问题描述】:

我有三个不同的表,我需要三个表中的同一列,并且我需要将所有值放入一个输出列中而不会丢失任何记录。以下是现有查询建议我进行一些修改

    SELECT 
    dbo.dealer_program_details.o_comments,
    dbo.Self_Am.o_comments,
    dbo.Coop_Payment_Detail.o_comments
    FROM
    dbo.dealer_program_details
    INNER JOIN
    dbo.Self_Am
    ON
    (
        dbo.dealer_program_details.DEALER_CODE = dbo.Self_Am.Dealer_Code)
    INNER JOIN
    dbo.Coop_Payment_Detail
   ON
    (
        dbo.dealer_program_details.DEALER_CODE = dbo.Coop_Payment_Detail.Dealer_Code)

现在我想将这三列合并为一列

【问题讨论】:

【参考方案1】:

如果您希望它们在一列中,则将它们连接在一起:

SELECT (dbo.dealer_program_details.o_comments + dbo.Self_Am.o_comments +
        dbo.Coop_Payment_Detail.o_comments
       ) as OneColumn
FROM dbo.dealer_program_details INNER JOIN
     dbo.Self_Am
     ON dbo.dealer_program_details.DEALER_CODE = dbo.Self_Am.Dealer_Code INNER JOIN
     dbo.Coop_Payment_Detail
     ONdbo.dealer_program_details.DEALER_CODE = dbo.Coop_Payment_Detail.Dealer_Code;

在 Sybase 中,您不必担心 NULL 值,因为它们被视为空字符串。在 SQL Server 中,如果任何列值为NULL,则结果将为NULL

编辑:

您可以使用coalesce() 选择第一个非NULL 行:

SELECT coalesce(dbo.dealer_program_details.o_comments, dbo.Self_Am.o_comments,
        dbo.Coop_Payment_Detail.o_comments
       ) as OneColumn

但是如果两个(或更多)列有 cmets,那么您将只保留第一个非 NULL 的。

【讨论】:

Gordon 这里还有其他方法,因为我们正在合并行。有什么办法可以在不合并行的情况下获得 coulumns 吗??

以上是关于将列中的数据合并为一列的主要内容,如果未能解决你的问题,请参考以下文章

将列中的 NA 替换为相邻列中的值

为一列中的值重塑数据

将不同行中的值合并为一列

如何将列中的所有数据移动到单个列(不合并),然后拆分为R中的新列?

CodeIgniter 查询:如何将列值移动到同一行中的另一列并将当前时间保存在原始列中?

如何将一列的列值组合到 MySQL 中的另一列中?