用SQL语句,如何把一列的数据横着显示?? DECLARE @S VARCHAR(100)SELECT @S=ISNULL(@S+',','')+NAME FROM TBSELECT @S 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /*如何将一列中所有的值一行显示数据源 a b c d e结果a,b,c,d,e*/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--方法一declare @sql varchar(1000)set @sql = ''select @sql = @sql + t.col + ',' from (select col from tb) as tset @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 tbprint @output/*a,b,c,d,e*/drop table tb create table tb(name varchar(10))insert into tb values('moke') insert into tb values('andy') insert into tb values('Shina') insert into tb values('Conroy')go--方法一declare @sql varchar(1000)set @sql = ''select @sql = @sql + t.name + ',' from (select name from tb) as tset @sql='select result =''' + left(@sql , len(@sql) - 1) + ''''exec(@sql)--方法二declare @output varchar(8000)select @output = coalesce(@output + ',' , '') + name from tbprint @outputdrop table tb /*result ---------------------- moke,andy,Shina,Conroymoke,andy,Shina,Conroy*/ isnull 和 coalesce有什么区别啊? ISNULL使用指定的替换值替换 NULL。语法ISNULL ( check_expression , replacement_value ) 参数check_expression将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。replacement_value在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。 返回类型返回与 check_expression 相同的类型。注释如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。示例A. 将 ISNULL 与 AVG 一起使用下面的示例查找所有书的平均价格,用值 $10.00 替换 titles 表的 price 列中的所有 NULL 条目。USE pubsGOSELECT AVG(ISNULL(price, $10.00))FROM titlesGO下面是结果集:-------------------------- 14.24 (1 row(s) affected)B. 使用 ISNULL下面的示例为 titles 表中的所有书选择书名、类型及价格。如果一个书名的价格是 NULL,那么在结果集中显示的价格为 0.00。USE pubsGOSELECT SUBSTRING(title, 1, 15) AS Title, type AS Type, ISNULL(price, 0.00) AS PriceFROM titlesGO下面是结果集:Title Type Price --------------- ------------ -------------------------- The Busy Execut business 19.99 Cooking with Co business 11.95 You Can Combat business 2.99 Straight Talk A business 19.99 Silicon Valley mod_cook 19.99 The Gourmet Mic mod_cook 2.99 The Psychology UNDECIDED 0.00 But Is It User popular_comp 22.95 Secrets of Sili popular_comp 20.00 Net Etiquette popular_comp 0.00 Computer Phobic psychology 21.59 Is Anger the En psychology 10.95 Life Without Fe psychology 7.00 Prolonged Data psychology 19.99 Emotional Secur psychology 7.99 Onions, Leeks, trad_cook 20.95 Fifty Years in trad_cook 11.95 Sushi, Anyone? trad_cook 14.99 COALESCE返回其参数中第一个非空表达式。语法COALESCE ( expression [ ,...n ] ) 参数expression任何类型的表达式。n表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。返回类型将相同的值作为 expression 返回。注释如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值。COALESCE(expression1,...n) 与此 CASE 函数等价:CASE WHEN (expression1 IS NOT NULL) THEN expression1 ... WHEN (expressionN IS NOT NULL) THEN expressionN ELSE NULL示例在下面的示例中,显示包含三列有关某个雇员每年工资收入信息的 wages 表:hourly_wage、salary 和 commission。但是,每个雇员只能接受一种付款方式。若要确定支付给所有雇员的工资总额,请使用 COALESCE 函数接受在 hourly_wage、salary 和 commission 中找到的非空值。SET NOCOUNT ONGOUSE masterIF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'wages') DROP TABLE wagesGOCREATE TABLE wages( emp_id tinyint identity, hourly_wage decimal NULL, salary decimal NULL, commission decimal NULL, num_sales tinyint NULL)GOINSERT wages VALUES(10.00, NULL, NULL, NULL)INSERT wages VALUES(20.00, NULL, NULL, NULL)INSERT wages VALUES(30.00, NULL, NULL, NULL)INSERT wages VALUES(40.00, NULL, NULL, NULL)INSERT wages VALUES(NULL, 10000.00, NULL, NULL)INSERT wages VALUES(NULL, 20000.00, NULL, NULL)INSERT wages VALUES(NULL, 30000.00, NULL, NULL)INSERT wages VALUES(NULL, 40000.00, NULL, NULL)INSERT wages VALUES(NULL, NULL, 15000, 3)INSERT wages VALUES(NULL, NULL, 25000, 2)INSERT wages VALUES(NULL, NULL, 20000, 6)INSERT wages VALUES(NULL, NULL, 14000, 4)GOSET NOCOUNT OFFGOSELECT CAST(COALESCE(hourly_wage * 40 * 52, salary, commission * num_sales) AS money) AS 'Total Salary' FROM wagesGO下面是结果集:Total Salary ------------ 20800.000041600.000062400.000083200.000010000.000020000.000030000.000040000.000045000.000050000.0000120000.000056000.0000(12 row(s) affected) coalesce 返回其参数中第一个非空表达式。 例如: a1 a2 a3 1 5 null null 3 2 COALESCE(a1, a2, a3)返回的就是: 1 3 sql 去除重复的问题,急,求高人指点... 怎么天添加事务 各位高手,请问这题怎么做?麻烦你们了,在线等,急~~~~ sql server 2005中两个标识列 问个一般语句,在线给分 求SQL语句谢谢高手了~给分 如何用php连接SQL server? 请问sql server中怎样获得统计表中列的数量,有这样的函数吗?60分 如何使管理员也看不到sqlserver里面的数据库资料! 求教一个----------------关于该交房租查询的SQL 关于一个存储过程问题 如何查询一个库中那些视图、存储过程、函数用了某个表的某个字段,谢谢
数据源
a
b
c
d
e
结果
a,b,c,d,e
*/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--方法一
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
print @output
/*
a,b,c,d,e
*/drop table tb
insert into tb values('moke')
insert into tb values('andy')
insert into tb values('Shina')
insert into tb values('Conroy')
go--方法一
declare @sql varchar(1000)
set @sql = ''
select @sql = @sql + t.name + ',' from (select name from tb) as t
set @sql='select result =''' + left(@sql , len(@sql) - 1) + ''''
exec(@sql)--方法二
declare @output varchar(8000)
select @output = coalesce(@output + ',' , '') + name from tb
print @outputdrop table tb /*
result
----------------------
moke,andy,Shina,Conroymoke,andy,Shina,Conroy
*/
使用指定的替换值替换 NULL。语法
ISNULL ( check_expression , replacement_value ) 参数
check_expression将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。replacement_value在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。 返回类型
返回与 check_expression 相同的类型。注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。示例
A. 将 ISNULL 与 AVG 一起使用
下面的示例查找所有书的平均价格,用值 $10.00 替换 titles 表的 price 列中的所有 NULL 条目。USE pubs
GO
SELECT AVG(ISNULL(price, $10.00))
FROM titles
GO下面是结果集:--------------------------
14.24 (1 row(s) affected)B. 使用 ISNULL
下面的示例为 titles 表中的所有书选择书名、类型及价格。如果一个书名的价格是 NULL,那么在结果集中显示的价格为 0.00。USE pubs
GO
SELECT SUBSTRING(title, 1, 15) AS Title, type AS Type,
ISNULL(price, 0.00) AS Price
FROM titles
GO下面是结果集:Title Type Price
--------------- ------------ --------------------------
The Busy Execut business 19.99
Cooking with Co business 11.95
You Can Combat business 2.99
Straight Talk A business 19.99
Silicon Valley mod_cook 19.99
The Gourmet Mic mod_cook 2.99
The Psychology UNDECIDED 0.00
But Is It User popular_comp 22.95
Secrets of Sili popular_comp 20.00
Net Etiquette popular_comp 0.00
Computer Phobic psychology 21.59
Is Anger the En psychology 10.95
Life Without Fe psychology 7.00
Prolonged Data psychology 19.99
Emotional Secur psychology 7.99
Onions, Leeks, trad_cook 20.95
Fifty Years in trad_cook 11.95
Sushi, Anyone? trad_cook 14.99
COALESCE
返回其参数中第一个非空表达式。语法
COALESCE ( expression [ ,...n ] ) 参数
expression任何类型的表达式。n表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。返回类型
将相同的值作为 expression 返回。注释
如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值。COALESCE(expression1,...n) 与此 CASE 函数等价:CASE
WHEN (expression1 IS NOT NULL) THEN expression1
...
WHEN (expressionN IS NOT NULL) THEN expressionN
ELSE NULL示例
在下面的示例中,显示包含三列有关某个雇员每年工资收入信息的 wages 表:hourly_wage、salary 和 commission。但是,每个雇员只能接受一种付款方式。若要确定支付给所有雇员的工资总额,请使用 COALESCE 函数接受在 hourly_wage、salary 和 commission 中找到的非空值。SET NOCOUNT ON
GO
USE master
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'wages')
DROP TABLE wages
GO
CREATE TABLE wages
(
emp_id tinyint identity,
hourly_wage decimal NULL,
salary decimal NULL,
commission decimal NULL,
num_sales tinyint NULL
)
GO
INSERT wages VALUES(10.00, NULL, NULL, NULL)
INSERT wages VALUES(20.00, NULL, NULL, NULL)
INSERT wages VALUES(30.00, NULL, NULL, NULL)
INSERT wages VALUES(40.00, NULL, NULL, NULL)
INSERT wages VALUES(NULL, 10000.00, NULL, NULL)
INSERT wages VALUES(NULL, 20000.00, NULL, NULL)
INSERT wages VALUES(NULL, 30000.00, NULL, NULL)
INSERT wages VALUES(NULL, 40000.00, NULL, NULL)
INSERT wages VALUES(NULL, NULL, 15000, 3)
INSERT wages VALUES(NULL, NULL, 25000, 2)
INSERT wages VALUES(NULL, NULL, 20000, 6)
INSERT wages VALUES(NULL, NULL, 14000, 4)
GO
SET NOCOUNT OFF
GO
SELECT CAST(COALESCE(hourly_wage * 40 * 52,
salary,
commission * num_sales) AS money) AS 'Total Salary'
FROM wages
GO下面是结果集:Total Salary
------------
20800.0000
41600.0000
62400.0000
83200.0000
10000.0000
20000.0000
30000.0000
40000.0000
45000.0000
50000.0000
120000.0000
56000.0000(12 row(s) affected)
coalesce 返回其参数中第一个非空表达式。 例如:
a1 a2 a3
1 5 null
null 3 2 COALESCE(a1, a2, a3)返回的就是:
1
3