写的一个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)
                 

case when then else多个条件_SQL高级知识——CASE CASE函数的类型CASE具有两种格式,简单CASE函数和CASE搜索函数。这两种方式,大部分情况下可以实现相同的功能。简单CASE函数语法CASE column WHEN <condition> THEN value WHEN <condition> THEN value......ELSE value END示例CASE sex WHEN '1' THEN '... 阅读详情

相关推荐

SQL Server中CASE WHEN的用法

工作中经常使用的一个关键字:CASE。说起CASE还得从我刚进入第一家公司的面试说起。第一家公司是我第一次面试公司,当时还是有点小紧张。在和HR沟通之后,就开始做三道面试题,给我影响深刻的是第一道和第三道都是用的CASE,因为之前对CASE比较了解,笔试也就顺利通过了。CASE是一个标量表达式,它是基于条件逻辑返回一个值。只能用在标量表达式中(如SELECT,WHERE,HAVING和ORDER ...

SQL数据库开发 1万+

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

Day01 Geant4学习

​ 用来记录粒子在每个step中的信息的,例如位置,能量,动量.例如,假设每一个粒子都有一个属于自己的id,会记录自己的轨迹状态信息就是track,当他发生反应时,就会产生新的id。​ 最终在新建的build文件夹中的vis.mac文件中设置,是自带的,如果有更高的需求可以自己去更改,但是一般都是写好的,设置好了图形界面的一些东西,呈现的自己建模的图形界面多大,需不需要网格什么的。从反应到结束的过程,其中也包括它产生的刺激粒子的反应到结束的过程,成为一个事件event。

LXS_357的博客 933

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

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

1855

Windows下飞桨PaddlePaddle 2.6.1 GPU版环境搭建全攻略(含CUDA 11.7配置避坑指南)

本文详细介绍了在Windows系统下搭建飞桨PaddlePaddle 2.6.1 GPU版环境的完整流程,特别针对CUDA 11.7和cuDNN的安装提供了避坑指南。从Anaconda环境配置、CUDA Toolkit安装到飞桨GPU版的验证,手把手帮助开发者高效完成深度学习环境搭建,解决常见问题并优化性能。

x8y9z0的博客 1094

利用OTSU阈值算法在ZYNQ上实现浒苔识别

利用OTSU阈值算法进行图像二值化,结果用HDMI显示

qq_38075564的博客 1274

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

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

秋秋的博客 1657

zabbix深度监控之邮件告警、微信群和微信告警

本文详细介绍了Zabbix监控系统实现邮件告警和微信告警的配置方法。邮件告警部分包含QQ和163邮箱的SMTP服务器配置、消息模板设置、告警流程三步骤(媒介配置、触发器动作、用户设置)。微信告警分为两种方式:企业微信群机器人告警(通过webhook实现)和企业微信应用告警(需创建应用并获取API参数)。两种告警方式都提供了完整的配置流程,包括脚本编写、权限设置、消息模板定制等关键步骤,并特别说明了如何使个人微信接收企业微信告警消息。文章还对比了SMTP、POP3、IMAP三种邮件协议的差异及适用场景。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 814

关于SQL中PIVOT函数的使用方法

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

qq_61820657的博客 1万+

Matlab 轴承信号仿真+分析

文章目录项目说明1、信号仿真1.1 仿真公式1.2 信号参数设置1.3 代码实现2、仿真信号分析2.1 小波变换2.2 快速谱峭度 项目说明 本文主要解决两个问题: 1、仿真包含周期性冲击信号、随机干扰冲击信号、调制干扰信号以及随机噪声四个成分的故障轴承信号; 2、使用小波变换以及快速谱峭度对该仿真信号进行分析。 1、信号仿真 1.1 仿真公式 这里的仿真信号公式主要参考了包文杰学者的硕士论文《加权谱峭度故障诊断方法研究与应用》,列举公式如下: 周期性冲击信号仿真 随机干扰冲击信号仿真 调制

cocofisher的博客 9267

复现CVE-2014-085(Apache ZooKeeper 未授权访问漏洞)

默认安装配置完的zookeeper允许未授权访问,管理员未配置访问控制列表(ACL)。导致攻击者可以在默认开放的2181端口下通过执行envi命令获得大量敏感信息(系统名称、java环境)导致任意用户可以在网络不受限的情况下进行未授权访问读取数据。

记录并分享学习安全的知识点.. 2173

又一个SQL的piovt的经典小例子

参考: http://bbs.youkuaiyun.com/topics/310027073 create table test2(id int,name varchar(20),quarter char,profile1 int) insert into test2 values(1,'a',1,1000) insert into test2 values(1,'a',2,2000) insert in

码农 2147

AI Agent 架构的底层原理与核心机制

AI Agent五层架构实现智能闭环运转:1)感知层负责多模态信息输入与预处理;2)记忆层分类存储短期/长期记忆及知识库;3)认知层通过ReAct推理和反思机制进行决策规划;4)工具层调用外部API扩展能力边界;5)执行层完成任务输出并形成反馈闭环。五层架构通过"输入-处理-输出-优化"的联动机制,使Agent具备自主决策、持续学习和任务执行能力,突破传统LLM的局限,实现从信息处理到实际落地的完整智能体系。

女王の专属领地 493

实际工作用到的:关于PIOVT和UNPIOVT的用法

Normally, we select as belowSELECT @@SPID AS SPID, CASE quoted_identifier WHEN 1 THEN 'ON' ELSE 'OFF' END QUOTED_IDENTIFIER, CASE arithabort WHEN 1 THEN 'ON' ELSE 'OFF' END ARITHABORT, CASE ansi_null_d

SuperBadBoy Test Road 2134

【异常】Claude Code 第三方API 400报错(thinking type should be enabled or disabled)解决方案

摘要: Claude Code接入第三方API端点时出现400参数错误,主要因新版默认启用的Adaptive Thinking功能与旧版接口参数格式不兼容(需thinking: {type: "adaptive"},但第三方仅支持布尔值)。解决方案为修改本地settings.json配置文件,添加"CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING": "1"环境变量并重启客户端,即可恢复思考模式功能。Adaptive Th

奶爸的编程之路,也就一周冷个三天 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SQL高级知识——CASE

点击上方SQL数据库开发,关注获取SQL视频教程SQL专栏SQL数据库基础知识汇总SQL数据库高级知识汇总CASE函数的类型CASE具有两种格式,简单CASE函数和CAS...

SQL数据库开发 1060

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SQL Server学习之路(三)

今天给大家说下工作中经常使用的一个关键字:CASE。说起CASE还得从我刚进入第一家公司的面试说起。第一家公司是我第一次面试公司,当时还是有点小紧张。在和HR沟通之后,就...

SQL数据库开发 716

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

较为常用的SQL脚本整理

工作中有许多比较常用的SQL脚本,今天开始分几章分享给大家。如果一个ID可以区分的话,可以这么写结果:对比一下发现,ID为1,2的被过滤掉了,因为他们只有一条记录如果几个ID才能区分的话,可以这么写结果:我们将原来的4列增加到了6列。细心的朋友可能发现了这个结果和上面的行转列怎么一模一样?其实上面的行转列是省略写法,这种是比较通用的写法。语法1:Insert INTO table(field1,field2,...) values(value1,value2,...)

u010567709的博客 762

case when then else_SQL高级知识——CASE的用法

CASE函数的类型CASE具有两种格式,简单CASE函数和CASE搜索函数。这两种方式,大部分情况下可以实现相同的功能。简单CASE函数语法CASE column WHEN THEN value WHEN THEN value......ELSE value END示例CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女'ELSE '其他' ENDCASE搜索...

weixin_39631932的博客 1453

case when then else_SQL高级知识——CASE

CASE函数的类型CASE具有两种格式,简单CASE函数和CASE搜索函数。这两种方式,大部分情况下可以实现相同的功能。简单CASE函数语法CASE column WHEN <condition> THEN value WHEN <condition> THEN value......ELSE value END示例CASE CASE搜索函数语法CASE WHEN <...

weixin_39672396的博客 122

case when else 默认随机_SQL高级知识——CASE的用法

CASE函数的类型CASE具有两种格式,简单CASE函数和CASE搜索函数。这两种方式,大部分情况下可以实现相同的功能。简单CASE函数语法CASE column WHEN THEN value WHEN THEN value......ELSE value END示例CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女'ELSE '其他' ENDCASE搜索...

weixin_29480231的博客 621

isnull pivot server sql_SqlServer行转列(PIVOT),列转行(UNPIVOT)总结

PIVOT用于将列值旋转为列名(即行转列)语法:table_sourcePIVOT(聚合函数(value_column)FOR pivot_columnIN())UNPIVOT用于将列明转为列值(即列转行)语法:table_sourceUNPIVOT(value_columnFOR pivot_columnIN())注意:PIVOT、UNPIVOT是SQL Server 2005的语法,使用需修改...

weixin_39793794的博客 351

sql 2005 pivot 用法:

PIVOT的中文意思是“在枢轴上转动”,比如对于一个2维坐标,将横坐标变成纵坐标,将纵坐标变成横坐标。反映在一个Relational Table上的意思就是:变行为列,变列为行。 表一:     表二:  将表一转换成表二:  _select* FROM StudentScorePIVOT (  SUM(Score) FOR Subject IN ([语文],[数学],[化学],[物理...

weixin_34228387的博客 159

SQL 内置函数(pivot) 纵转横

1.创建表: create table test(id int,name varchar(20),quarter int,profile int)) insert into test values(1,'a',1,1000); insert into test values(1,'a',2,1000); insert into test values(1,'a',3,1000); i

一瞬间 3613

SQL : joins

SQL left join , right join , full outer join

belldeep的专栏 349
上一篇: C# 同间字查询 (汉字转拼音 拼音转汉字 简体繁体互转 )
下一篇: sql语句中int转varchar
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值