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
类型 NUMBER
和 columns 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 转换,您可以使用 cast
。 More 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
需要您的专家帮助构建 sql 将多个不同列的串联值查询为一个列值。
在我的例子中,我有包含列
的 Table1acid1, acid2, acid3, acid4, acid5
类型 VARCHAR
以及列 clr_bal_amt1, clr_bal_amt2, clr_bal_amt3, clr_bal_amt4, clr_bal_amt5
类型 NUMBER
和 columns 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 转换,您可以使用 cast
。 More 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