当前位置: 代码迷 >> Sql Server >> 将sql一张表转成二维表,执行报错,说是有语法有关问题!
  详细解决方案

将sql一张表转成二维表,执行报错,说是有语法有关问题!

热度:86   发布时间:2016-04-24 09:55:29.0
将sql一张表转成二维表,执行报错,说是有语法问题!!!
有这样一张表(BookshopPlus.dbo.BuyList)想对他进行二维查询

Name                    Title                               Quantity
张三       Visual C# 2005从入门到精通         1
李四       Java 2005从入门到精通                 2
李四       Visual C# 2005从入门到精通         3
王五       Asp.net开发基础                         1

sql执行代码如下,

declare @sql varchar(8000)
select 
  @sql=isnull(@sql+',','')
  +'sum(case when [Title]='+ltrim([Title])+' then  quantity else 0 end) as ['+ltrim([Title])+']'
from
(select distinct [Title] from BookshopPlus.dbo.BuyList) t
 
exec ('select Name,'+@sql+' from BookshopPlus.dbo.BuyList group by Name')


希望二维查询结果如下:

           Visual C# 2005从入门到精通               Java 2005从入门到精通             Asp.net开发基础
张三                      1                                                      0                                              0
李四                      3                                                      2                                              0
王五                      0                                                      0                                              1



疑问,求求哪位大师,为什么我执行完,说我有语法错误呢。。。到底是代码哪不对呢


------解决思路----------------------
select 出来 执行下 就知道错在哪了
------解决思路----------------------
看的辛苦,直接帮你写一个算了
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(發糞塗牆)
-- Date    :2014-09-18 13:57:43
-- 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)
--
----------------------------------------------------------------
--> 测试数据:dbo.[BuyList]
if object_id('dbo.[BuyList]') is not null drop table dbo.[BuyList]
go 
create table dbo.[BuyList]([Name] varchar(4),[Title] varchar(24),[Quantity] int)
insert dbo.[BuyList]
select '张三','VisualC#2005从入门到精通',1 union all
select '李四','Java2005从入门到精通',2 union all
select '李四','VisualC#2005从入门到精通',3 union all
select '王五','Asp.net开发基础',1
--------------开始查询--------------------------


declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename([Title])+'=max(case when [Title]='+quotename([Title],'''')+' then [Quantity] else 0 end)'
from [BuyList] group by [Title]
exec('select [Name]'+@s+' from [BuyList] group by [Name]')
  相关解决方案