~~~~~~~~~行转列问题,马上给分!~~~~~~~~~~~

hxm20003 2013-10-10 10:49:42
Table_A
id name prop1
1 张3 A
2 张3 B
3 李4 A
4 李4 B
5 李4 C
6 李4 D
7 李4 D
8 李4 D
...

要求根据名称对prop1合计:
name A B C D
张3 1 1 0 0
李4 1 1 1 3
。。。
...全文
87 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Landa_Peter 2013-10-10
  • 打赏
  • 举报
回复
if object_id('[Table_A]') is not null drop table [Table_A]
go 
create table [Table_A]([id] int,[name] varchar(3),[prop1] varchar(1))
insert [Table_A]
select 1,'张3','A' union all
select 2,'张3','B' union all
select 3,'李4','A' union all
select 4,'李4','B' union all
select 5,'李4','C' union ALL
select 6,'李4','D' union all
select 7,'李4','D' union all
select 8,'李4','D'
--------------开始查询--------------------------

DECLARE @sql NVARCHAR(MAX), @colList NVARCHAR(MAX)
SET @colList=(select STUFF((select ','+quotename([prop1]) from [Table_A] group by [prop1] for XML path('')),1,1,''))
SET @sql = N'select name, 
                    isnull([A],0) A,
				    isnull([B],0) B,
				    isnull([C],0) C,
				    isnull([D],0) D
		     from
    (
    select * from
    (select count(*) num,name,prop1 from [Table_A] a
    group by name,prop1)A
    pivot
    (max([num]) for [prop1] in('+ @colList +')) b
    )C
'
EXEC(@sql)
这样行吗
發糞塗牆 2013-10-10
  • 打赏
  • 举报
回复
我的?
hxm20003 2013-10-10
  • 打赏
  • 举报
回复
消息 102,级别 15,状态 1,第 1 行 ' ' 附近有语法错误。 消息 137,级别 15,状态 2,第 19 行 必须声明标量变量 "@s"。 执行报错???
唐诗三百首 2013-10-10
  • 打赏
  • 举报
回复

create table Table_A 
(id int, name varchar(10), prop1 varchar(10))

insert into Table_A
 select 1, '张3', 'A' union all
 select 2, '张3', 'B' union all
 select 3, '李4', 'A' union all
 select 4, '李4', 'B' union all
 select 5, '李4', 'C' union all
 select 6, '李4', 'D' union all
 select 7, '李4', 'D' union all
 select 8, '李4', 'D'


select name,
       isnull([A],0) 'A',
       isnull([B],0) 'B',
       isnull([C],0) 'C',
       isnull([D],0) 'D'
from
(select name,prop1,count(1) 'x'
 from Table_A a
 group by name,prop1) t
pivot(max(x) for prop1 in([A],[B],[C],[D])) p
order by name desc

/*
name       A           B           C           D
---------- ----------- ----------- ----------- -----------
张3         1           1           0           0
李4         1           1           1           3

(2 row(s) affected)
*/
Andy__Huang 2013-10-10
  • 打赏
  • 举报
回复
create table #tb(id int, name varchar(10), prop1 varchar(10))  
insert into #tb
select 1,'张3','A'
union all select 2,'张3','B'
union all select 3,'李4','A'
union all select 4,'李4','B'
union all select 5,'李4','C'
union all select 6,'李4','D'
union all select 7,'李4','D'
union all select 8,'李4','D'


declare @sql varchar(8000)
set @sql=''
select @sql=@sql + ',['+rtrim(prop1)+']=sum(case rtrim(prop1) when '''+rtrim(prop1)+''' then 1 else 0 end)'
from #tb group by rtrim(prop1)
exec('select name'+@sql+' from #tb group by name')

/*
name	A	B	C	D
李4	1	1	1	3
张3	1	1	0	0
*/
MrYangkang 2013-10-10
  • 打赏
  • 举报
回复
我还想把类似的例子直接贴,没想到版主的速度。。。
發糞塗牆 2013-10-10
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-10-10 10:51:04
-- Version:
--      Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
--	Jun 10 2013 20:09:10 
--	Copyright (c) Microsoft Corporation
--	Enterprise Evaluation Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[Table_A]
if object_id('[Table_A]') is not null drop table [Table_A]
go 
create table [Table_A]([id] int,[name] varchar(3),[prop1] varchar(1))
insert [Table_A]
select 1,'张3','A' union all
select 2,'张3','B' union all
select 3,'李4','A' union all
select 4,'李4','B' union all
select 5,'李4','C' union ALL
select 6,'李4','D' union all
select 7,'李4','D' union all
select 8,'李4','D'
--------------开始查询--------------------------

declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename(prop1)+'=sum(case when prop1='+quotename(prop1,'''')+' then 1 else 0 end)'
from [Table_A] group by prop1
exec('select [name]'+@s+' from [Table_A] group by [name]')
----------------结果----------------------------
/* 
name A           B           C           D
---- ----------- ----------- ----------- -----------
李4   1           1           1           3
张3   1           1           0           0
*/

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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