Sql server sql server通过生成查询在单列中显示多列值

Sql server sql server通过生成查询在单列中显示多列值,sql-server,sql-server-2008,Sql Server,Sql Server 2008,在将多个不同列的值串联为一个列值时,需要专家帮助构建sql查询 在我的例子中,表1包含了列 VARCHAR类型的acid1、acid2、acid3、acid4、acid5以及clr_bal_amt1、clr_bal_amt2、clr_bal_amt3、clr_bal_amt4、clr_bal_amt5列 日期类型的类型编号和列deposit_Duedate 1、deposit_Duedate 2、deposit_Duedate 3、deposit_Duedate 4、deposit_Duedat

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

在我的例子中,表1包含了列

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

日期类型的类型编号和列deposit_Duedate 1、deposit_Duedate 2、deposit_Duedate 3、deposit_Duedate 4、deposit_Duedate 5

现在,我尝试以单列值的形式实现输出,类似这样

表1.酸1 |表1.CLR | u BAL | u AMT1 |表1.存款| u到期日1 表1.酸2 |表1.CLR | U BAL | U AMT2 |表1.存款|应付款2 表1.酸3 |表1.CLR_BAL_AMT3 |表1.存款|应付款3 表1.酸4 |表1.CLR | U BAL | U AMT4 |表1.存款|应付款4
表1.ACID5 |表1.CLR | u BAL | u AMT5 |表1.DEPOSIT | u duedate 5作为最终样本。

据我所知,您希望选择由|分隔的所有列,并在单个列中。您需要将所有非VARCHAR值转换为VARCHAR,然后使用+运算符将它们合并到一列中。要进行转换,可以使用强制转换。您可能还想使用COALESCE,因为如果任意列的值为null,那么它将返回null


尝试按以下方式进行铸造:

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

所以你想将所有列合并并选择为单列,对吗?这里有什么问题?除了将数据转换为varchar之外,还有其他方法吗?我得到的错误是,当我尝试执行select table1.ACID1 | table1.CLR | U BAL | U AMT1 | table1.DEPOSIT | DUEDATE1.ACID2 | table1.CLR | U BAL | U AMT2 | table1.DEPOSIT | DUEDATE2表1.acid 3 |表1.CLR_BAL_AMT3 |表1.DEPOSIT_dudate3表1.acid 4 |表1.CLR_BAL_AMT4 |表1.DEPOSIT_dudate4表1.acid 5 |表1.CLR_BAL AMT5 |表1.DEPOSIT | dudate5作为其帮助的最终示例。快乐编码。
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