写的一个SQL的piovt的小例子

Mysql一维表转二维表,动态的行转列 mysql一维表转二维表,动态的行转列 阅读详情
-----查询条件
declare @startDate varchar(20)--开始时间
declare @endDate   varchar(20)--结束时间
declare @brandId varchar(10) --项目ID
declare @ProductLevel varchar(5)--产品级数
declare @TopicLevel varchar(5)--话题级数
set @startDate='2012-7-18'
set @endDate='2012-7-20'
set @brandId='20003'
set @ProductLevel=1
set @TopicLevel=12
-----内部临时变量
declare @firstProducts varchar(max)
declare @secondProducts varchar(max)
declare @firstTopics varchar(max)
declare @secondTopics varchar(max)
declare @sqlPageTable varchar(max)
declare @sqlFirstProductTable varchar(max)
declare @sqlSecondProductTable varchar(max)
declare @sqlFirstTopicTable varchar(max)
declare @sqlSecondTopicTable varchar(max)
declare @TableCondition varchar(100)
declare @RelevanceCondition varchar(max)
declare @WhereCondition varchar(500)
declare @SQL varchar(max)

-----获得某品牌下的所有产品
select @firstProducts=ISNULL(@firstProducts+',','')+'['+ProductName+']' FROM [IWT_BrandProduct] where [ParentProductID]=0 and BrandID=@BrandID
select @secondProducts=ISNULL(@secondProducts+',','')+'['+ProductName+']' FROM [IWT_BrandProduct] where [ParentProductID]<>0 and BrandID=@BrandID
-----获得某品牌下的所有话题
select @firstTopics=ISNULL(@firstTopics+',','')+'['+TagSearchName+']' FROM (select distinct TagSearchName from [IWT_BrandTag] where ParentTagID=0 and BrandID=@BrandID) as A
select @secondTopics=ISNULL(@secondTopics+',','')+'['+TagSearchName+']' FROM (select distinct TagSearchName from [IWT_BrandTag] where ParentTagID<>0 and BrandID=@BrandID) as A
-----获得出现的关联表
set @TableCondition= case @ProductLevel when 1 then ' ,FirstProductTable.* ' when 2 then ' ,SecondProductTable.* ' when 12 then ',FirstProductTable.*  ,SecondProductTable.* ' end 
set @TableCondition= case @TopicLevel when 1 then @TableCondition+' ,FirstTopicTable.* ' when 2 then @TableCondition+' ,SecondTopicTable.* ' when 12 then @TableCondition+' ,FirstTopicTable.*  ,SecondTopicTable.* ' end 
---------------------------------------------------------------------------page的基本信息
set @sqlPageTable=
'SELECT      [TempPageViewTest].Page_ID
            ,Page_Title as 标题
            ,Page_URL as 网址
            ,case ISNULL(Page_ProState,-1) when -1 then ''未处理'' when 0 then ''未处理'' when 1 then ''已处理'' when 2 then ''已关注'' when 3 then ''需建议'' end AS 处理状态
            ,case ISNULL(Page_AuditState,-1) when -1 then ''未审核'' when 0 then ''未审核'' when 1 then ''已审核'' end as 审核状态
            ,Isnull(Page_CustomerState,0) as 是否建议
            ,Isnull(Page_Storey,0) as 楼层数
            ,Isnull(Page_Extend,0) as 是否正面
            ,case Page_IsArtificial when 0 then ''系统抓取'' when 1 then ''人工录入'' end as 分拣类型
            ,convert(varchar(8),Page_LastReplyTime,112) 最后回复日期
            ,convert(varchar(8),Page_UDate,112) 修改日期
            ,convert(varchar(8),Page_CDate,112) 分拣日期
            ,convert(varchar(8),Page_PostTime,112) 发布日期
            ,Page_ReplyCount as 回复数
            ,Page_VisitCount as 访问数
            ,PageDomain_NetName as 媒体
            ,siteTypeNew_title as 媒体类别
            ,case Page_Attitude when 1 then ''攻击'' when 2 then ''负面'' when 3 then ''中立'' when 4 then ''正面'' when 5 then ''赞扬'' end as 健康度
            ,Page_Return
            ,Admin_RealName as 分拣员
            ,case ISNULL(Treadate,1) when 1 then '''' end  as 处理时间
            ,case Page_FromWeb when '''' then 0 else 1 end 是否转载
            ,Page_area as 地区
            '+@TableCondition+'
            FROM [dbo].[TempPageViewTest]'
---------------------------------------------------------------------------一级产品部分
set @sqlFirstProductTable=
'SELECT  * FROM
               (SELECT DISTINCT      
                      dbo.IWT_Page.Page_ID                   
                     ,IWT_BrandProduct_1.ProductName
                     ,1 AS TempC                 
                FROM  dbo.IWT_BrandTag INNER JOIN
                      dbo.IWT_PageTag ON dbo.IWT_BrandTag.TagID = dbo.IWT_PageTag.TagID INNER JOIN
                      dbo.IWT_Page ON dbo.IWT_PageTag.PageID = dbo.IWT_Page.Page_ID INNER JOIN
                      dbo.IWT_BrandProduct ON dbo.IWT_BrandTag.ProductID = dbo.IWT_BrandProduct.ProductID INNER JOIN
                      dbo.IWT_BrandProduct AS IWT_BrandProduct_1 ON dbo.IWT_BrandProduct.ParentProductID=IWT_BrandProduct_1.ProductID
                WHERE dbo.IWT_Page.Brand_ID='+@brandId+') as A
                      pivot
                      (
                       COUNT(A.Tempc) FOR A.ProductName IN('+@firstProducts+')
                )as P'
set @sqlFirstProductTable=' LEFT JOIN ('+@sqlFirstProductTable+') as FirstProductTable ON [TempPageViewTest].Page_ID=FirstProductTable.Page_ID '
---------------------------------------------------------------------------二级产品部分
set @sqlSecondProductTable=
'SELECT  * FROM
               (SELECT DISTINCT      
                      dbo.IWT_Page.Page_ID                   
                     ,dbo.IWT_BrandProduct.ProductName
                     ,1 AS TempC                 
                FROM  dbo.IWT_BrandTag INNER JOIN
                      dbo.IWT_PageTag ON dbo.IWT_BrandTag.TagID = dbo.IWT_PageTag.TagID INNER JOIN
                      dbo.IWT_Page ON dbo.IWT_PageTag.PageID = dbo.IWT_Page.Page_ID INNER JOIN
                      dbo.IWT_BrandProduct ON dbo.IWT_BrandTag.ProductID = dbo.IWT_BrandProduct.ProductID INNER JOIN
                      dbo.IWT_BrandTag AS IWT_BrandTag_1 ON dbo.IWT_BrandTag.ParentTagID = IWT_BrandTag_1.TagID
                WHERE dbo.IWT_Page.Brand_ID='+@brandId+') as A
                      pivot
                      (
                       COUNT(A.Tempc) FOR A.ProductName IN('+@secondProducts+')
                )as P' 
set @sqlSecondProductTable= ' LEFT JOIN ('+@sqlSecondProductTable+') as SecondProductTable ON [TempPageViewTest].Page_ID=SecondProductTable.Page_ID '             
---------------------------------------------------------------------------一级话题部分
set @sqlFirstTopicTable=
'SELECT  * FROM
                (SELECT DISTINCT     
                      dbo.IWT_Page.Page_ID                   
                     ,IWT_BrandTag_1.TagName AS fristTag 
                     ,1 AS TempC                 
                 FROM dbo.IWT_BrandTag 
                      INNER JOIN dbo.IWT_PageTag ON dbo.IWT_BrandTag.TagID = dbo.IWT_PageTag.TagID 
                      INNER JOIN dbo.IWT_Page ON dbo.IWT_PageTag.PageID = dbo.IWT_Page.Page_ID 
                      INNER JOIN dbo.IWT_BrandTag AS IWT_BrandTag_1 ON dbo.IWT_BrandTag.ParentTagID = IWT_BrandTag_1.TagID
                 WHERE dbo.IWT_Page.Brand_ID='+@brandId+') as A
                       pivot
                       (
                        COUNT(A.Tempc) FOR A.fristTag IN('+@firstTopics+')
                       )as T '   
set @sqlFirstTopicTable=' LEFT JOIN ('+@sqlFirstTopicTable+') as FirstTopicTable ON [TempPageViewTest].Page_ID=FirstTopicTable.Page_ID '
---------------------------------------------------------------------------二级话题部分
set @sqlSecondTopicTable=
'SELECT  * FROM
                (SELECT DISTINCT     
                      dbo.IWT_Page.Page_ID                   
                     ,dbo.IWT_BrandTag.TagName AS secondTag 
                     ,1 AS TempC                 
                 FROM dbo.IWT_BrandTag 
                      INNER JOIN dbo.IWT_PageTag ON dbo.IWT_BrandTag.TagID = dbo.IWT_PageTag.TagID 
                      INNER JOIN dbo.IWT_Page ON dbo.IWT_PageTag.PageID = dbo.IWT_Page.Page_ID 
                      INNER JOIN dbo.IWT_BrandTag AS IWT_BrandTag_1 ON dbo.IWT_BrandTag.ParentTagID = IWT_BrandTag_1.TagID
                 WHERE dbo.IWT_Page.Brand_ID='+@brandId+') as A
                       pivot
                       (
                        COUNT(A.Tempc) FOR A.secondTag IN('+@secondTopics+')
                       )as T '
set  @sqlSecondTopicTable= ' LEFT JOIN ('+@sqlSecondTopicTable+') as SecondTopicTable ON [TempPageViewTest].Page_ID=SecondTopicTable.Page_ID ' 
---------------------------------------------------------------------------获得关联条件
set @RelevanceCondition=case @ProductLevel when 1  then @sqlFirstProductTable
                                           when 2  then @sqlSecondProductTable
                                           when 12 then @sqlFirstProductTable+@sqlSecondProductTable
                         end 
set @RelevanceCondition=case @TopicLevel   when 1  then @RelevanceCondition + @sqlFirstTopicTable
                                           when 2  then @RelevanceCondition + @sqlSecondTopicTable
                                           when 12 then @RelevanceCondition + @sqlFirstTopicTable + @sqlSecondTopicTable
                         end 
set @WhereCondition=' WHERE Brand_ID='+@brandId+' and Page_PostTime >='''+@startDate+''' and Page_PostTime<'''+@endDate+''''                                        
---------------------------------------------------------------------------拼接查询的SQL语句
set @SQL=@sqlPageTable+@RelevanceCondition+@WhereCondition
--print @SQL
exec(@SQL)
                 

Power Query功能解析及用法——逆透视列(列转行Unpiovt、行转列Piovt 想必大家在开发报表时,经常会遇到后台开发的事实表或者维度表的表结构无法满足前端的开发需求。所以这里就需要前端的小伙伴对导入进PBI里面对数据或者是表结构进行变化处理。 今天主要分享的是以下几点: 1.什么是数据的结构?什么情况下面需要对数据进行结构化的处理? 2.如何改变数据的结构? 3.列转行Unpiovt、行转列Piovt、转置(Transpose)、反转行(Reverse Rows)的实际用法及解析 4.它们有什么相似及区别之处? 1.什么是数据的结构?什么情况下面需要对数据进行结构化的. 阅读详情

相关推荐

SQLpivot语句与unpivot语句

文章目录pivot行转列例子1例子2例子3unpivot列转行 pivot行转列 pivot 用于将列值旋转为列名(即行转列),在SQLServer 2000可以用聚合函数配合CASE语句实现 即SQL语句行列转换的两种方法 case…when与pivot函数的应用 但pivot运算符能够实现CASE语句相同的功能,并且可以用更少的代码 语法 引用自:https://blog.csdn.net/yx183/article/details/82423420 SELECT <非透视的列>,

积一时之步,臻千里之遥程 3575

SqlServer数据库之PIOVT运算符

PIOVT标准格式: SELECT ... FROM &lt;source_table_or_table_expression&gt; PIVOT(&lt;agg_func&gt;(&lt;aggregation_element&gt;) FOR &lt;spreading_element&gt; IN (&lt;list_of_targe...

suisui的博客 819

ESP32设备驱动-VCNL4040趋近传感器

VCNL4040 将趋近传感器 (PS)、环境光传感器 (ALS) 和高功率 IRED 集成到一个小型封装中。它通过CMOS工艺将光电二极管、放大器和模数转换电路集成到一个芯片中。

视觉与物联智能 903

行转列pivot -- 简单的实例 to 动态拼接行转列

一、orcale简单行转列 with temp as ( select distinct r.id rid, r.level_no levelno, r.type_name rname, c.id cid, ...

秋秋的博客 1655

oracle 使用pivot 函数进行批量数据的动态行转列

公司业务要求,需要对一批数据大批量地进行动态行转列之后进行分析,而pivot 函数in中不能使用子查询,有个方法是说可以通过动态sql拼接的方法实现,在网上找了很久之后没找到具体的方法,就自己去摸索实现了。具体方法如下。 因为需要实现的是动态行转列,所以需要先用wm_concat(distinct())函数单独查出列名,再用dbms_lob.substr()将clob字段转成字符串。...

1853

关于SQLPIVOT函数的使用方法

这篇文章给大家分享的是“pivot函数是什么,具体用法是怎样的”,希望这篇文章对你一定的参考价值

qq_61820657的博客 1万+

C/C++文件指针的区别:读取同一个文件结果诡异

对于C/C++的文件操作,就是对指向FILE的指针©或者对fstream对象进行操作,此时有一个”文件位置指针“至关重要,这个是指示下一次读操作所在字节的整数值。每次读一个(或者1组)数据后,系统自动将文件位置指针移动到下一个位置上。 其实我是在用C++一个简单的词法分析程序时候遇到的问题,废话少说,我们直接进入正题~~(也就是我遇到的问题【捂脸】) 在C++中对一个文本完全读,分别打...

像我这样的人 837

Oracle、MySQL实现行列互转

Oracle、MySQL实现行转列,unpiovtpivot函数的使用。

weixin_40649680的博客 1038

SQLPIVOT函数的用法

PIVOTSQL Server 中的一个功能,用于将行转换为列。然而,MySQL 和 Oracle 不直接支持 PIVOT 语法。但是,你可以使用条件聚合或其他技术来模拟 PIVOT 的行为。-- 从子查询中选择数据,子查询从源表中选择需要的数据SELECT ...FROM-- 源查询,从源表中选取你希望进行PIVOT操作的列SELECT ...-- 可以包含WHERE子句、GROUP BY子句等以筛选或组织数据-- PIVOT操作,将行数据转换为列数据PIVOT

LP'S Blog 6747

SQLPIVOT的用法

PIVOT 提供的语法比一系列复杂的 SELECT…CASE 语句中所指定的语法更简单和更具可读性。 以下是带批注的 PIVOT 语法: SELECT <非透视的列>, [第一个透视的列] AS <列名称>, [第二个透视的列] AS <列名称>, ... [最后一个透视的列] AS <列名称>, FROM (...

weixin_43715545的博客 2万+

SQL常用语句总结

总结常用SQL语法

小菜菜的博客 709

行列转换利器:Oracle pivot函数全面解析

2、现在我要把SEX当成列,将AGE值放入该列的结果,使用pivot语句。3、使用decode函数的方法。4、使用case when函数。1、准备一张现成的表。

七一 886

行列转换 pivot

行列转化语法:   select * from ( //子查询 select   别名.你需要展示的数据   from  表名  别名 ) pivot (  函数 max/sum/...(你要转化成的列的数据,如三家分店 分别每天的交易额) for  你想作为表头的字段(比如日期 ) in () ) 案例:  select * from ( se

qq_30750447的博客 515

SQL Povit函数使用及实例

PIVOT函数用法与实例

Smilecoc的博客 5847

pivot的用法

在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL) 我们先插入一些模拟数据: INSERT INTO WEEK_INCOME SELECT '星期一',1000 UNION ALL SELECT '星期二',2000 UNION ALL SELECT ...

qq_34409900的博客 7万+

SQL UNPIVOT详解

一、UNPIVOT:   UNPIVOTPIVOT正好相反,它把数据从列旋转到行 例:   首先将源数据显示出来,看一下:      我们先把empid为1和2的2006年数据修改为null UPDATE dbo.EmpYearValues SET [2006] = NULL WHERE empid IN(1, 2);   设置完成之后在查询源数据:如下:    ...

weixin_30323631的博客 855

Excel对比Python之piovt_table(数据透视表)

Excel的数据透视表功能是平时工作非常熟悉的功能之一,也是非常强大而且基本上所有人都离不开的功能,今天来对比一下,在Excel和Python下分别对数据透视表进行操作各自的优点。 首先从网上获取一个数据,我下载了一个大小大约为5M,数据行超过十二万行的销售数据,图片是这样的 Excel篇 首先打开这个表格,有点卡顿,接下来,直接进行数据透视表的操作 会自动识别区域,然后点击在新的表格里面生...

weixin_41949549的博客 2131

SQLPIVOT 行转列和UNPIVOT列转行实例讲解

PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOTPIVOT执行相反的操作,将表值表达式的列转换为列值。   通俗简单的说:PIVOT就是行转列,UNPIVOT就是列转行 一、PIVOT实例 1. 建表 建立一个销售情况表,其中,year字段表示年份,quarter字段表示季度,am

sky_F的博客 1万+

SQL常用脚本整理(上)

点击关注公众号,SQL干货及时获取后台回复:1024,获取海量学习资源 SQL刷题专栏 SQL145题系列 大家注意: 因为微信改了推送机制,会有小伙伴刷不到当天的文章, 一些比较实用的知识和信息,错过了就是错过了。 所以建议大家加个星标,就能第一时间收到推送了。工作中有许多比较常用的SQL脚本,今天开始分几章分享给大家。1、行转列的用法PIVOTCREATE table test (id int...

SQL数据库开发 226

AI在保险产品定价优化中的创新应用

在当今保险市场中,准确合理的产品定价是保险公司实现可持续发展的关键因素之一。传统的保险产品定价主要基于经验数据和精算模型,但这种方式往往存在数据处理效率低、对复杂风险因素考虑不足等问题。本文的目的在于深入探讨AI技术如何在保险产品定价中进行创新应用,以提高定价的准确性、效率和灵活性,更好地满足市场需求和客户个性化需求。本文的范围涵盖了AI技术在保险产品定价各个环节的应用,包括风险评估、费率计算、产品设计等方面。同时,还会涉及到相关的核心算法、数学模型以及实际应用案例等内容。

欢迎来到我的CSDN空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 959

5步解决断点回归(使用2SLS)

5步解决断点回归,最简单的操作(使用2SLS方法,含有样本数据和do文件),如果想要更深入了解相关内容及权威的操作步骤和方法请看我之前的帖子进行下载,谢谢。如果放在稳健性检验中可以用前面四个步骤就可以按成,如果放在主回归检验还要再去了解下最优带宽和滞后项等的检验哦

上一篇: C# 同间字查询 (汉字转拼音 拼音转汉字 简体繁体互转 )
下一篇: sql语句中int转varchar
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值