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

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
。。。
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用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
*/
用户手册 ~~~~~~~~ RAR 3.30 32 位控制台版本 ~~~~~~~~~~~~~~~~~~~~~~~~ =-=-=-=-=-=-=-=-=-=-=-=-=-=- 欢迎使用 RAR 压缩文件管理器! -=-=-=-=-=-=-=-=-=-=-=-=-=-= 简介 ~~~~ RAR 是一个强力压缩工具,允许你管理和管理压缩文件。控制台 RAR 只支持 RAR 格式,带有的 ".rar" 扩展名的文件。ZIP 和其他格式不被支持。Windows 用户可以 安装图形界面 RAR 版本 - WinRAR,它可以处理更多的压缩文件类型。 RAR 的功能包括: * 高度成熟的原创压缩算法 * 对于文本、声音、图像和 32 位和 64 位 Intel 可执程序压缩的特殊优化算法 * 获得比类似工具更好的压缩率,使用'固实'压缩 * 身份校验(只有注册版本可用) * 自解压压缩文件和分卷压缩(SFX) * 对物理损伤的压缩文件的恢复能力 * 锁定,密码,文件顺序表,文件安全和更多…… 配置文件 ~~~~~~~~ Unix 版本的 RAR 从用户的 home 或 /etc 目录中的 .rarrc 文件读取配置文件信息 (存储在 HOME 环境变量中) Windows 的版本 RAR 从 rar.ini 文件读取配置文件信息,它放在 rar.exe 文件相 同的目录中。 这个文件包含下字符串: 开关= 环境变量 ~~~~~~~~ 可以通过建立"RAR"环境变量来添加默认参数到命令中. 例如,在 UNIX 中,下命令可以被添加到你的配置中: RAR='-s -md1024' export RAR RAR 将使用这个字符串作为命令的默认参数,并将使用 1024KB 字典大小来创建 “固实”压缩文件。 RAR 控制选项使用下优先级: 命名开关 最高优先级 在 RAR 变量中的开关 低优先级 保存在配置文件中的开关 最低优先级 日志文件 ~~~~~~~~ 如果在命令或配置文件中指定开关 -ilog ,RAR 将会把处理压缩文件中遇到的错误 等写到日志文件中。在 Unix 中,这个文件名为 .rarlong,放在用户的 home 目录中。 在 Windows 中,它名为 rar.log,放在 rar.exe 文件相同的目录中。开关 -ilog 允 许改变默认的日志名。 固实压缩的文件表 - rarfiles.lst ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rarfiles.lst 包含用户定义的文件表,告诉RAR添加文件到固实压缩文件时的顺序。 它可以包含文件名通配符和指定项目-$default。默认项目定义了这个文件中与其他 项目不相符时的顺序清单位置。 注释字符是 ';'. 在 Windows 中,这个文件应该放在RAR所在的目录中。 在 Unix 中- 放在用户的 home 目录或 /etc中。 提高压缩率和操作速度的提示: - 在压缩文件中,小文件应该被组织在一起; - 频繁被处理的文件应该放在开始的位置。 普通的掩码越靠近顶端优先权就越高,但是这个规则存在例外。如果 rarfiles.lst 包含两个掩码,并且所有文件及匹配第一个掩码,也匹配第二个掩码, 第一个掩码 将拥有更高的优先权,即使它被放到第二个后面。例如,存在*.cpp 和 f*.cpp 掩码 的情况下,f*.cpp 拥有更高的优先权。 RAR 命令语法 ~~~~~~~~~

34,593

社区成员

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

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