sql server通过构建查询在单列中的多个列值

时间:2015-02-16 11:33:02

标签: sql-server sql-server-2008

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

在我的情况下,我有Table1,其中包含列

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

类型为NUMBER的{​​{1}}和columns deposit_duedate1, deposit_duedate2, deposit_duedate3, deposit_duedate4, deposit_duedate5类型的

现在我尝试在单列值中实现输出

DATE

2 个答案:

答案 0 :(得分:0)

根据我的理解,您希望选择由|和单列分隔的所有列。您需要将所有非VARCHAR值转换为VARCHAR,然后使用+运算符将它们连接到单列中。对于转换,您可以使用castMore about cast here.。并且您可能还想使用COALESCE,因为如果任何列值为null,则它将返回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

答案 1 :(得分:0)

尝试如下投射:

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