sql 通过构建查询在单列中服务器多列值

sql server multiple column values in single column by building query

需要您的专家帮助构建 sql 将多个不同列的串联值查询为一个列值。

在我的例子中,我有包含列

的 Table1

acid1, acid2, acid3, acid4, acid5 类型 VARCHAR 以及列 clr_bal_amt1, clr_bal_amt2, clr_bal_amt3, clr_bal_amt4, clr_bal_amt5

类型 NUMBERcolumns deposit_duedate1, deposit_duedate2, deposit_duedate3, deposit_duedate4, deposit_duedate5 类型 DATE

现在我尝试将输出作为单列值,类似于这样

"table1.ACID1|table1.CLR_BAL_AMT1|table1.DEPOSIT_DUEDATE1 table1.ACID2|table1.CLR_BAL_AMT2|table1.DEPOSIT_DUEDATE2<br> table1.ACID3|table1.CLR_BAL_AMT3|table1.DEPOSIT_DUEDATE3 table1.ACID4|table1.CLR_BAL_AMT4|table1.DEPOSIT_DUEDATE4<br> table1.ACID5|table1.CLR_BAL_AMT5|table1.DEPOSIT_DUEDATE5" 作为 FinalSampleVal .

根据我的理解,您希望 select 所有由 | 分隔的列并在单列中。您需要将所有非 VARCHAR 值转换为 VARCHAR,然后使用 + 运算符,您可以将它们连接成单个 column.For 转换,您可以使用 castMore about cast here.. And you may want to use the COALESCE also because if the any column value is null then it will return the null.More info on coalesce.

   SELECT COALESCE(table1.ACID1,'defaultvalue') + '|'
        + CAST(COALESCE(table1.CLR_BAL_AMT1,0) AS VARCHAR)
        +'|'+CAST(table1.DEPOSIT_DUEDATE1 AS VARCHAR) 
        +'|'+ table1.ACID2+'|'+CAT(table1.CLR_BAL_AMT2 AS VARCHAR)    
        +'|'+CAST(table1.DEPOSIT_DUEDATE2 AS VARCHAR) 
        +'|'+table1.ACID3+'|'+CAST(table1.CLR_BAL_AMT3 AS VARCHAR) 
        +'|'+CAST(table1.DEPOSIT_DUEDATE3 AS VARCHAR) 
        +'|'+table1.ACID4+'|'+CAST(table1.CLR_BAL_AMT4)
        +'|'+CAST(table1.DEPOSIT_DUEDATE4 AS VARCHAR) 
        +'|'+ table1.ACID5+'|'+CAST(table1.CLR_BAL_AMT5 AS VARCHAR) 
        +'|'+CAST(table1.DEPOSIT_DUEDATE5 AS VARCHAR) AS FinalSampleVal
   FROM 
       yourtable As table1

尝试如下投射:

select table1.ACID1|cast(table1.CLR_BAL_AMT1 AS VARCHAR(MAX))|table1.DEPOSIT_DUEDATE1
table1.ACID2|cast(table1.CLR_BAL_AMT2 AS VARCHAR(MAX))|table1.DEPOSIT_DUEDATE2
table1.ACID3|cast(table1.CLR_BAL_AMT3 AS VARCHAR(MAX))|table1.DEPOSIT_DUEDATE3 
table1.ACID4|cast(table1.CLR_BAL_AMT4 AS VARCHAR(MAX))|table1.DEPOSIT_DUEDATE4 
table1.ACID5|cast(table1.CLR_BAL_AMT5 AS VARCHAR(MAX))|table1.DEPOSIT_DUEDATE5" as FinalSampleVal