SQL将一列转换成一行,并将这一行形成新的列

摘要:
SQL部分------查询要转换的数据SELECTnameFROMdbo.base_ pay_ typeWHEREis_启用的数据=1如图所示:

SQL部分-----

  1. .查询出来要转换的数据
SELECT name FROM dbo.base_pay_type WHERE is_enabled = 1
数据如图:
SQL将一列转换成一行,并将这一行形成新的列第1张

2.将查询到的数据转换成行,以逗号隔开,以【】包裹

SELECT STUFF((SELECT  '[' + name + '],'  
FROM(SELECT name FROM dbo.base_pay_type WHERE is_enabled = 1) a  FOR  XML PATH('')  ), 1,0, '') AS Name 
如图:
SQL将一列转换成一行,并将这一行形成新的列第2张

3,去掉最后一个逗号

SELECT LEFT(a.Name,LEN(a.Name)-1) AS Name FROM (SELECT STUFF((SELECT  '[' + name + '],'  
FROM(SELECT name FROM dbo.base_pay_type WHERE is_enabled = 1) a  FOR  XML PATH('')  ), 1,0, '') AS Name ) AS a
如图:
SQL将一列转换成一行,并将这一行形成新的列第3张

4,这一行形成新的列,用PIVOT实现

SELECT * FROM (
 select sellerid,pay_type_name,cast(sum(amount) as decimal(18,2)) as payamout from (
 SELECT distinct oi.order_guid,ss.SellerId,bs.name AS pay_type_name,op.amount
 FROM dbo.shop_sellers AS ss
 LEFT JOIN dbo.order_item oi ON ss.SellerId=oi.tracking_id
 LEFT JOIN dbo.order_list ol ON ol.order_guid = oi.order_guid
 LEFT JOIN dbo.order_pay op ON ol.order_guid=op.order_guid
 LEFT JOIN dbo.base_pay_type bs ON op.pay_type_id=bs.pay_type_id
 INNER JOIN dbo.shops s ON s.ShopGuid=ol.owner
 WHERE bs.is_enabled=1 AND op.is_received=1 AND order_status='finished' and pay_status='paid' 
 and s.ShopId IN(SELECT ShopId FROM dbo.shops WHERE 1=1 and shopid=15 or ParentShopId=15) 
 AND ol.order_time between '2018-01-17' and '2018-08-17 23:59:59') a
 GROUP BY SellerId,pay_type_name) AS PA PIVOT(MAX( payamout ) FOR 
 pay_type_name IN ([现金],[支付宝],[微信支付],[会员卡],[康品汇会员卡],[银联扫码支付]))PPA
如图:SQL将一列转换成一行,并将这一行形成新的列第4张

C#后台代码,先将一列转换成一行,以逗号隔开,【】包裹

string SQL = "SELECT LEFT(a.Name,LEN(a.Name)-1) AS Name FROM (SELECT STUFF((SELECT  '[' + name + '],'  
FROM(SELECT name FROM dbo.base_pay_type WHERE is_enabled = 1) a FOR XML PATH('') ), 1, 0, '') AS Name ) AS a
"; DataTable dt = dbAccess.ExecuteTable(SQL); string filwes = dt.Rows[0]["name"].ToString();
得到的结果如上面标题3,然后拼接SQL,将filwes作为参数输入下面SQL语句

SELECT * FROM (
select sellerid,pay_type_name,cast(sum(amount) as decimal(18,2)) as payamout from (
SELECT distinct oi.order_guid,ss.SellerId,bs.name AS pay_type_name,op.amount
FROM dbo.shop_sellers AS ss
LEFT JOIN dbo.order_item oi ON ss.SellerId=oi.tracking_id
LEFT JOIN dbo.order_list ol ON ol.order_guid = oi.order_guid
LEFT JOIN dbo.order_pay op ON ol.order_guid=op.order_guid
LEFT JOIN dbo.base_pay_type bs ON op.pay_type_id=bs.pay_type_id
INNER JOIN dbo.shops s ON s.ShopGuid=ol.owner
WHERE bs.is_enabled=1 AND op.is_received=1 AND order_status='finished' and pay_status='paid'
and s.ShopId IN(SELECT ShopId FROM dbo.shops WHERE 1=1 {1}) {2}) a
GROUP BY SellerId,pay_type_name) AS PA PIVOT(MAX( payamout ) FOR pay_type_name IN (‘“+filwes+”’))PPA

免责声明:文章转载自《SQL将一列转换成一行,并将这一行形成新的列》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇64位ubuntu中chrome浏览器安装Adobe Flashplayer插件WebGL的第二个小程序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue:axios拦截器

拦截器分两类:请求拦截器和响应拦截器 一、请求拦截器 在请求发出之前设置一些信息。比如说设置请求头, 在use方法参数即第一个函数的形参中通过config来做信息的配置,配置完之后,必须把config返回,这样才能完成拦截器的功能。第二个函数用于处理错误的信息。 用拦截器的方式配置请求头会更加灵活。拦截器中可以通过config获取更多的信息,比如url地...

MVC中两种实体:View Model和Business Model的简化(转载)

在MVC的Model中,我们可以定义很多与视图相关的元数据,这些元数据对我们开发视图起着相当重要的作用,特别是在数据验证方面。这些元数据一般情况下我们是不会定义在业务实体(或持久化实体)上面,所以很多情况下,我们会需要开发两种实体:View Model和Business Model。这样就造成,在Action与View的沟通当中,我们需要使用View Mo...

【ZT】SQL实现多字段模糊匹配关键字查询

我们开发数据库应用时,常常需要用到模糊查询。如果同一个条件需要匹配很多字段怎么办呢?通常,程序员会每个字段都在SQL中“field like'%cond%'”一次。这样,SQL语句会长得惊人,碰上复杂一点的,甚至SQL语句会因为超长而被数据库拒绝执行。其实,这个问题只要动动脑 筋就很容易解决:首先,将要匹配相同条件的字段连起来(field1+field2+...

网络爬虫基本原理

 网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。这篇博客主要对爬虫以及抓取系统进行一个简单的概述。 一、网络爬虫的基本结构及工作流程     一个通用的网络爬虫的框架如图所示:  网络爬虫的基本工作流程如下:     1.首先选取一部分精心挑选的种子URL;     2.将这些URL放入...

分享公司DAO层动态SQL的一些封装

主题   公司在DAO层使用的框架是Spring Data JPA,这个框架很好用,基本不需要自己写SQL或者HQL就能完成大部分事情,但是偶尔有一些复杂的查询还是需要自己手写原生的Native SQL或者HQL.同时公司前端界面使用的是jquery miniui框架,并且自己进行了一些封装.   当界面上查询条件比较多的时候,需要动态拼接查询条件,使用J...

转载:SQL注入演示demo

网上看到的一个SQL注入的演示demo,很完整所以转载过来,分享给大家。先要感谢作者!!   作者:潘良虎链接:http://www.zhihu.com/question/22953267/answer/80141632来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Web安全简史在Web1.0时代,人们更多是关注服务器端...