SQL行转列统计问题

简介: 今天在CSDN上看见有人提出如下的SQL统计问题,于是帮他写了一个SQL语句。问题如下:表结构如下要实现的效果如下:这个涉及行专列问题,SQL语句如下:insert int...

今天在CSDN上看见有人提出如下的SQL统计问题,于是帮他写了一个SQL语句。

问题如下:


表结构如下

要实现的效果如下:


这个涉及行专列问题,SQL语句如下:

insert into product values('13303','茶杯','蓝色','a',20);
insert into product values('13303','茶杯','蓝色','b',10);
insert into product values('13303','茶杯','蓝色','c',30);
insert into product values('13303','茶杯','灰色','a',10);
insert into product values('13304','水杯','白色','b',20);


declare @sql varchar(8000)
set @sql = 'select [id],[name],[color] '
select @sql = @sql + ' , max(case [size] when ''' + [size] + ''' then number else 0 end) [' + [size] + ']'
from (select distinct [size] from product) as a
set @sql = @sql + ' from product group by [id],[name],[color]'
exec(@sql)

最终显示效果如下图:


SQL行列转换+合并操作,原帖地址:http://bbs.csdn.net/topics/390348963

Create table 数据  --创建表
(
    ID Int IDENTITY(1,1)  not null,  
    编号  Varchar(50),   
    明细 Varchar(50),    
    Primary Key(ID)        
);
 
Insert Into 数据
Select 1,'a' Union all
Select 1,'b' Union all
Select 1,'c' Union all
Select 2,'a' Union all
Select 2,'b' Union all
Select 2,'d'Union all
Select 3,'a'Union all
Select 3,'b'
 
--创建自定义函数
Create Function CSDN
(
   @mx Varchar(50)
)
Returns Varchar(8000)
as 
Begin
Declare @str Varchar(8000)
Set @str = ''
Select @str = @str + cast(明细 as Varchar(50))  + ',' from 数据 Where 编号 = @mx 
Set @str = SubString(@str,1,len(@str)-1)
Return(@str)
End
 
--调用自定义函数得到结果
Select Distinct 编号,dbo.CSDN(编号) as 明细From 数据;





相关文章
|
6月前
|
SQL
行转列【死磕sql】
行转列【死磕sql】
32 3
|
7月前
|
SQL 关系型数据库 MySQL
mysql一条sql查询出多个统计结果
mysql一条sql查询出多个统计结果
61 0
|
29天前
|
SQL
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
30 1
|
2月前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
47 0
|
3月前
|
SQL JSON 分布式计算
ODPS SQL ——列转行、行转列这回让我玩明白了!
本文详细介绍了在MaxCompute中如何使用TRANS_ARRAY和LATERAL VIEW EXPLODE函数来实现列转行的功能。
|
4月前
|
SQL 存储 关系型数据库
SQL SERVER 查询所有表 统计每张表的大小
SQL SERVER 查询所有表 统计每张表的大小
45 0
|
7月前
|
SQL
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
69 0
|
5月前
|
SQL 大数据 HIVE
每天一道大厂SQL题【Day33】行转列,列转行
每天一道大厂SQL题【Day33】行转列,列转行
49 0
每天一道大厂SQL题【Day33】行转列,列转行
|
7月前
|
SQL BI HIVE
【Hive SQL 每日一题】统计用户留存率
用户留存率是衡量产品成功的关键指标,表示用户在特定时间内持续使用产品的比例。计算公式为留存用户数除以初始用户数。例如,游戏发行后第一天有10000玩家,第七天剩5000人,第一周留存率为50%。提供的SQL代码展示了如何根据用户活动数据统计每天的留存率。需求包括计算系统上线后的每日留存率,以及从第一天开始的累计N日留存率。通过窗口函数`LAG`和`COUNT(DISTINCT user_id)`,可以有效地分析用户留存趋势。
447 1