sql 横纵列问题

netajax1 2014-08-01 03:31:23
itemname checkvalue
左眼视力 1.0
右眼视力 1.5
左眼矫正视力 1.5
右眼矫正视力 1.5

结果(都是左眼/右眼打头,多个项目,不固定,需要动态)

视力 矫正视力
左眼 1.0 1.5
右眼 1.0 1.5

...全文
110 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
netajax1 2014-08-01
  • 打赏
  • 举报
回复
引用 8 楼 DBA_Huangzj 的回复:
开会去
----------------------------------------------------------------
-- Author  :DBA_tbZJ(發糞塗牆)
-- Date    :2014-08-01 15:32:54
-- Version:
--      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
--	May 14 2014 18:34:29 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[tb]
DROP TABLE TB
go
create table tb(
DataItemName nvarchar(20),
CheckValue char(10)
)
insert into tb(DataItemName,CheckValue)values('左眼OD裸眼视力','0.10')
insert into tb(DataItemName,CheckValue)values('右眼OD裸眼视力','0.10')
insert into tb(DataItemName,CheckValue)values('左眼OD球面镜','-4.50')
insert into tb(DataItemName,CheckValue)values('右眼OD球面镜','-5.50')
insert into tb(DataItemName,CheckValue)values('左眼OD柱镜','-1.50')
insert into tb(DataItemName,CheckValue)values('右眼OD柱镜','-1.50')
insert into tb(DataItemName,CheckValue)values('左眼OD轴位','5.00')
insert into tb(DataItemName,CheckValue)values('右眼OD轴位','180.00')
insert into tb(DataItemName,CheckValue)values('左眼OD最佳矫正视力','0.90')
insert into tb(DataItemName,CheckValue)values('右眼OD最佳矫正视力','0.90-1')

declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename(substring([DataItemName],3,LEN([DataItemName])))+'=max(case when substring([DataItemName],3,LEN([DataItemName]))='+quotename(substring([DataItemName],3,LEN([DataItemName])),'''')+' then [checkvalue] else null end)'
from [tb] group by substring([DataItemName],3,LEN([DataItemName]))
exec('select substring([DataItemName],1,2) as 视力'+@s+' from [tb] group by substring([DataItemName],1,2)')


----------------结果----------------------------
/* 
视力   OD裸眼视力     OD球面镜      OD轴位       OD柱镜       OD最佳矫正视力
---- ---------- ---------- ---------- ---------- ----------
右眼   0.10       -5.50      180.00     -1.50      0.90-1    
左眼   0.10       -4.50      5.00       -1.50      0.90      

*/
多谢大神
發糞塗牆 2014-08-01
  • 打赏
  • 举报
回复
开会去
----------------------------------------------------------------
-- Author  :DBA_tbZJ(發糞塗牆)
-- Date    :2014-08-01 15:32:54
-- Version:
--      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
--	May 14 2014 18:34:29 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[tb]
DROP TABLE TB
go
create table tb(
DataItemName nvarchar(20),
CheckValue char(10)
)
insert into tb(DataItemName,CheckValue)values('左眼OD裸眼视力','0.10')
insert into tb(DataItemName,CheckValue)values('右眼OD裸眼视力','0.10')
insert into tb(DataItemName,CheckValue)values('左眼OD球面镜','-4.50')
insert into tb(DataItemName,CheckValue)values('右眼OD球面镜','-5.50')
insert into tb(DataItemName,CheckValue)values('左眼OD柱镜','-1.50')
insert into tb(DataItemName,CheckValue)values('右眼OD柱镜','-1.50')
insert into tb(DataItemName,CheckValue)values('左眼OD轴位','5.00')
insert into tb(DataItemName,CheckValue)values('右眼OD轴位','180.00')
insert into tb(DataItemName,CheckValue)values('左眼OD最佳矫正视力','0.90')
insert into tb(DataItemName,CheckValue)values('右眼OD最佳矫正视力','0.90-1')

declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename(substring([DataItemName],3,LEN([DataItemName])))+'=max(case when substring([DataItemName],3,LEN([DataItemName]))='+quotename(substring([DataItemName],3,LEN([DataItemName])),'''')+' then [checkvalue] else null end)'
from [tb] group by substring([DataItemName],3,LEN([DataItemName]))
exec('select substring([DataItemName],1,2) as 视力'+@s+' from [tb] group by substring([DataItemName],1,2)')


----------------结果----------------------------
/* 
视力   OD裸眼视力     OD球面镜      OD轴位       OD柱镜       OD最佳矫正视力
---- ---------- ---------- ---------- ---------- ----------
右眼   0.10       -5.50      180.00     -1.50      0.90-1    
左眼   0.10       -4.50      5.00       -1.50      0.90      

*/
netajax1 2014-08-01
  • 打赏
  • 举报
回复
引用 6 楼 DBA_Huangzj 的回复:
给点“有问题”的数据吧。
create table tb( DataItemName nvarchar(20), CheckValue char(10) ) insert into tb(DataItemName,CheckValue)values('左眼OD裸眼视力','0.10') insert into tb(DataItemName,CheckValue)values('右眼OD裸眼视力','0.10') insert into tb(DataItemName,CheckValue)values('左眼OD球面镜','-4.50') insert into tb(DataItemName,CheckValue)values('右眼OD球面镜','-5.50') insert into tb(DataItemName,CheckValue)values('左眼OD柱镜','-1.50') insert into tb(DataItemName,CheckValue)values('右眼OD柱镜','-1.50') insert into tb(DataItemName,CheckValue)values('左眼OD轴位','5.00') insert into tb(DataItemName,CheckValue)values('右眼OD轴位','180.00') insert into tb(DataItemName,CheckValue)values('左眼OD最佳矫正视力','0.90') insert into tb(DataItemName,CheckValue)values('右眼OD最佳矫正视力','0.90-1')
發糞塗牆 2014-08-01
  • 打赏
  • 举报
回复
给点“有问题”的数据吧。
netajax1 2014-08-01
  • 打赏
  • 举报
回复
而且checkvalue是字符类型
發糞塗牆 2014-08-01
  • 打赏
  • 举报
回复
嗯,把你的数据列全一点看看
引用 3 楼 netajax1 的回复:
[quote=引用 1 楼 DBA_Huangzj 的回复:]
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(發糞塗牆)
-- Date    :2014-08-01 15:32:54
-- Version:
--      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
--	May 14 2014 18:34:29 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([itemname] varchar(12),[checkvalue] numeric(2,1))
insert [huang]
select '左眼视力',1.0 union all
select '右眼视力',1.5 union all
select '左眼矫正视力',1.5 union all
select '右眼矫正视力',1.5


declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename(substring([itemname],3,LEN([itemname])))+'=max(case when substring([itemname],3,LEN([itemname]))='+quotename(substring([itemname],3,LEN([itemname])),'''')+' then [checkvalue] else 0 end)'
from [huang] group by substring([itemname],3,LEN([itemname]))
exec('select substring([itemname],1,2) as 视力'+@s+' from [huang] group by substring([itemname],1,2)')


----------------结果----------------------------
/* 
视力   矫正视力                                    视力
---- --------------------------------------- ---------------------------------------
右眼   1.5                                     1.5
左眼   1.5                                     1.0

*/
加入多一个左眼XX 右眼XX,那左眼右眼视力是不是也把左右眼XX值max进去了?[/quote]
netajax1 2014-08-01
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(發糞塗牆)
-- Date    :2014-08-01 15:32:54
-- Version:
--      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
--	May 14 2014 18:34:29 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([itemname] varchar(12),[checkvalue] numeric(2,1))
insert [huang]
select '左眼视力',1.0 union all
select '右眼视力',1.5 union all
select '左眼矫正视力',1.5 union all
select '右眼矫正视力',1.5


declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename(substring([itemname],3,LEN([itemname])))+'=max(case when substring([itemname],3,LEN([itemname]))='+quotename(substring([itemname],3,LEN([itemname])),'''')+' then [checkvalue] else 0 end)'
from [huang] group by substring([itemname],3,LEN([itemname]))
exec('select substring([itemname],1,2) as 视力'+@s+' from [huang] group by substring([itemname],1,2)')


----------------结果----------------------------
/* 
视力   矫正视力                                    视力
---- --------------------------------------- ---------------------------------------
右眼   1.5                                     1.5
左眼   1.5                                     1.0

*/
加入多一个左眼XX 右眼XX,那左眼右眼视力是不是也把左右眼XX值max进去了?
netajax1 2014-08-01
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(發糞塗牆)
-- Date    :2014-08-01 15:32:54
-- Version:
--      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
--	May 14 2014 18:34:29 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([itemname] varchar(12),[checkvalue] numeric(2,1))
insert [huang]
select '左眼视力',1.0 union all
select '右眼视力',1.5 union all
select '左眼矫正视力',1.5 union all
select '右眼矫正视力',1.5


declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename(substring([itemname],3,LEN([itemname])))+'=max(case when substring([itemname],3,LEN([itemname]))='+quotename(substring([itemname],3,LEN([itemname])),'''')+' then [checkvalue] else 0 end)'
from [huang] group by substring([itemname],3,LEN([itemname]))
exec('select substring([itemname],1,2) as 视力'+@s+' from [huang] group by substring([itemname],1,2)')


----------------结果----------------------------
/* 
视力   矫正视力                                    视力
---- --------------------------------------- ---------------------------------------
右眼   1.5                                     1.5
左眼   1.5                                     1.0

*/
好像不对哦,我其他项查出来为0
發糞塗牆 2014-08-01
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(發糞塗牆)
-- Date    :2014-08-01 15:32:54
-- Version:
--      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
--	May 14 2014 18:34:29 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([itemname] varchar(12),[checkvalue] numeric(2,1))
insert [huang]
select '左眼视力',1.0 union all
select '右眼视力',1.5 union all
select '左眼矫正视力',1.5 union all
select '右眼矫正视力',1.5


declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename(substring([itemname],3,LEN([itemname])))+'=max(case when substring([itemname],3,LEN([itemname]))='+quotename(substring([itemname],3,LEN([itemname])),'''')+' then [checkvalue] else 0 end)'
from [huang] group by substring([itemname],3,LEN([itemname]))
exec('select substring([itemname],1,2) as 视力'+@s+' from [huang] group by substring([itemname],1,2)')


----------------结果----------------------------
/* 
视力   矫正视力                                    视力
---- --------------------------------------- ---------------------------------------
右眼   1.5                                     1.5
左眼   1.5                                     1.0

*/
通过慢sql分析的学习,了解什么是慢sql,以及慢SQL会引起那些性能问题。清楚慢sql日志的设置,然后再通过慢sql分析工具的学习,清楚慢sql分析的步骤和流程。慢sql分析工具:mysqldumpslow工具、explain工具、profile工具、Optimizer Trace工具。 提供课程中所使用的sql语句。 课程内容:第一章:课程简介1、课程介绍2、课程大纲 第二章:慢sql简介1、慢sql简介2、慢sql会引起的问题 第三章:慢日志的设置1、慢sql的分析流程2、慢日志参数理解3、慢日志参数设置:第1种方式:my.ini文件设置4、慢日志参数设置:第2种方式:sql脚本设置5、慢日志参数设置-效果验证 第四章:如何发现慢sql1、如何发现慢sql:第1种方式:慢日志文件2、如何发现慢sql:第2种方式:mysql库的slow_log表 第五章:慢sql分析工具1、慢sql提取-mysqldumpslow工具-使用方法2、慢sql提取-mysqldumpslow工具-操作实战3、慢sql的执行计划分析-explain分析-执行计划结果说明4、慢sql的执行计划分析-explain分析-索引介绍+type类型举例5、慢sql的资源开销分析-profile分析-分析步骤6、慢sql的资源开销分析-profile分析-show profile执行阶段说明7、慢sql的资源开销分析-profile分析-完整列表说明+操作实战8、慢sql的跟踪分析-Optimizer Trace分析-分析步骤9、慢sql的跟踪分析-Optimizer Trace表的介绍10、索引失效场景举例 第六章:慢日志清理1、慢日志清理

34,590

社区成员

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

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