有这样一张表(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]')