SQL 查询结果横向显示???

我的小黑 2008-09-27 11:57:19
假设一张表
A
id name count
1 衣服 100
2 裤子 300
3 鞋子 200
4 帽子 120
5 链子 110
... ... ...

查询出来的结果应该就像上面一样,我想横向显示,而且最后还要显示一条count的汇总,SQL语句怎么写,要最简洁的办法?
...全文
268 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
我的小黑 2008-10-08
  • 打赏
  • 举报
回复
谢谢大家
wxg22526451 2008-10-06
  • 打赏
  • 举报
回复
这样?
declare @s varchar(8000),@s2 varchar(8000)
select @s = isnull(@s+',','') + '['+ltrim(id)+']= max('''+[name]+''')'
,@s2=isnull(@s2+',','') + 'max('''+ltrim([count])+''') '
from ta

exec('select '+@s + ',sum(count) as s_count from ta union all select '+@s2+',null')

/*
1 2 3 4 5 s_count
---- ---- ---- ---- ---- -----------
衣服 裤子 鞋子 帽子 链子 830
100 300 200 120 110 NULL
*/
我的小黑 2008-10-06
  • 打赏
  • 举报
回复
高人出来指点下呀~
我的小黑 2008-09-29
  • 打赏
  • 举报
回复
都不对呀~~~
我要ID也横向显示呀?
hyqwan11112 2008-09-28
  • 打赏
  • 举报
回复

select [衣服],[裤子],[鞋子],[帽子],[链子]
from ( select name,count from ta ) p
pivot ( max(count) for name in([衣服],[裤子],[鞋子],[帽子],[链子])) as pvt

-狙击手- 2008-09-28
  • 打赏
  • 举报
回复
衣服          裤子          鞋子          帽子          链子
----------- ----------- ----------- ----------- -----------
100 300 200 120 110

(1 行受影响)
-狙击手- 2008-09-28
  • 打赏
  • 举报
回复


select [衣服],[裤子],[鞋子],[帽子],[链子]
from ( select name,count from ta ) p
pivot ( max(count) for name in([衣服],[裤子],[鞋子],[帽子],[链子])) as pvt
-狙击手- 2008-09-28
  • 打赏
  • 举报
回复
------------------------------------
-- Author: happyflsytone
-- Date:2008-09-28 00:00:27
------------------------------------

-- Test Data: ta
IF OBJECT_ID('ta') IS NOT NULL
DROP TABLE ta
Go
CREATE TABLE ta(id INT,name NVARCHAR(2),count INT)
Go
INSERT INTO ta
SELECT 1,'衣服',100 UNION ALL
SELECT 2,'裤子',300 UNION ALL
SELECT 3,'鞋子',200 UNION ALL
SELECT 4,'帽子',120 UNION ALL
SELECT 5,'链子',110
GO
--Start
declare @s varchar(8000)
select @s = isnull(@s+',','') + '['+name+']= max(case when name = '''+name+''' then count else 0 end)'
from ta
exec('select '+@s + ',sum(count) as s_count from ta')


--Result:
/*

衣服 裤子 鞋子 帽子 链子 s_count
----------- ----------- ----------- ----------- ----------- -----------
100 300 200 120 110 830

(1 行受影响)
*/
--End
wer123q 2008-09-28
  • 打赏
  • 举报
回复

declare
@str varchar(1000),
@str2 varchar(1000)
set @str = 'select '
set @str2 = ''
select @str2 = @str2+','+'max(case name when '''+name+''' then count else 0 end)as'''+name+''''
from(select distinct name from tb)a
exec(@str + @str2 + 'sum(count)as''zs'' from tb')
richnaly 2008-09-28
  • 打赏
  • 举报
回复
楼上回答的好啊
qinhl99 2008-09-28
  • 打赏
  • 举报
回复
case when 行列转置

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧