sql 获取 一列的值显示一行
sql 获取 一列的值显示一行
create table tb(col varchar(20)) insert tb values ('a') insert tb values ('b') insert tb values ('c') insert tb values ('d') insert tb values ('e') go select * from tb --方法一 declare @sql varchar(1000) set @sql = '' select @sql = @sql + t.col + ',' from (select col from tb) as t set @sql='select result = ''' + left(@sql , len(@sql) - 1) + '''' exec(@sql) /* result ---------- a,b,c,d,e, */
--方法二 declare @output varchar(8000) select @output = coalesce(@output + ',' , '') + col from tb --特别提醒:sql server 中 NUll和字符的"+"操作.结果仍然是NULL print @output /* a,b,c,d,e */
drop table tb
COALESCE (Transact-SQL) 返回其参数中第一个非空表达式。 返回数据类型优先级最高的 expression 的数据类型。如果所有表达式都不可为 Null,则结果的类型也不可为 Null。 如果所有参数均为 NULL,则 COALESCE 返回 NULL。 COALESCE(expression1,...n) 的功能与以下 CASE 表达式相同:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
WHEN (expression2 IS NOT NULL) THEN expression2
...
ELSE expressionN
END
尽管 ISNULL 等同于 COALESCE,但它们的行为是不同的。包含具有非空参数的 ISNULL 的表达式将视为 NOT NULL,而包含具有非空参数的 COALESCE 的表达式将视为 NULL。在 SQL Server 中,若要对包含具有非空参数的 COALESCE 的表达式创建索引,可以使用 PERSISTED 列属性将计算列持久化,如以下语句所示:
复制
CREATE TABLE #CheckSumTest ( ID int identity , Num int DEFAULT ( RAND() * 100 ) , RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY );