34,590
社区成员
发帖
与我相关
我的任务
分享
BigGoodsAUID LabName LabCode
4450880 产地区域 澄海
4450880 IC语言 不分语种
4450880 材质 NULL
4450880 包装语言 NULL
4450880 是否时货 NULL
4450880 特殊商品 NULL
4450880 适用年龄 NULL
4450880 灯光 带灯光
4450880 声音 带声音
4450880 尺寸 小型
26430520 是否时货 非时货
26430520 产地区域 澄海
26430520 包装语言 英文包装
26430520 IC语言 无IC
26430520 特殊商品 非特殊商品
26430520 适用年龄 3岁+
26430520 材质 塑料
26430520 灯光 不带灯光
26430520 声音 不带声音
28718938 IC语言 其它
28718938 材质 EVA
28718938 产地区域 澄海
28718938 特殊商品 版权商品
28718938 适用年龄 0-6个月
28718938 是否时货 非时货
28718938 包装语言 其它
28718938 灯光 不带灯光
28718938 声音 带声音
28718938 尺寸 大型
列名 4450880 26430520 28718938
产地区域 澄海 澄海 澄海
IC语言 不分语种 无IC 其它
材质 NULL 塑料 EVA
包装语言 NULL 英文包装 其它
是否时货 NULL 非时货 非时货
特殊商品 NULL 非特殊商品 版权商品
适用年龄 NULL 3岁+ 0-6个月
灯光 带灯光 不带灯光 不带灯光
声音 带声音 不带声音 带声音
尺寸 小型 null 大型
create table xy
(ID int,TagName varchar(10),ValueName varchar(10))
insert into xy
select 1,'IC语言','English' union all
select 1,'特殊商品','保护' union all
select 1,'服装','戏服' union all
select 2,'IC语言','china' union all
select 2,'特殊商品','其他' union all
select 2,'灯光','红色'
declare @tsql varchar(6000)
select @tsql=isnull(@tsql+',','')
+'max(case when TagName=a.TagName and ID='+rtrim(ID)+' then ValueName else null end) '''+rtrim(ID)+''' '
from (select distinct ID from xy) t
select @tsql='select a.TagName,'+@tsql
+' from xy a
group by a.TagName'
exec(@tsql)
/*
TagName 1 2
---------- ---------- ----------
IC语言 English china
灯光 NULL 红色
服装 戏服 NULL
特殊商品 保护 其他
(4 row(s) affected)
*/
IF OBJECT_ID('Test') IS NOT NULL
DROP TABLE Test
go
CREATE TABLE Test
(
ID INT ,
TagName VARCHAR(50) ,
ValueName VARCHAR(50)
)
INSERT INTO Test
SELECT '1' ,
'IC语言' ,
'English'
UNION ALL
SELECT '1' ,
'特殊商品' ,
'保护'
UNION ALL
SELECT '1' ,
'服装' ,
'戏服'
UNION ALL
SELECT '2' ,
'IC语言' ,
'china'
UNION ALL
SELECT '2' ,
'特殊商品' ,
'其他'
UNION ALL
SELECT '2' ,
'灯光' ,
'红色'
GO
--------------------------------------------------查询(静态)--------------------------------------------------
SELECT TagName ,
MAX(CASE ID WHEN 1 THEN ValueName ELSE NULL
END) [1],MAX(CASE ID WHEN 2 THEN ValueName ELSE NULL
END) [2] FROM dbo.test GROUP BY TagName
--------------------------------------------------查询(动态)--------------------------------------------------
DECLARE @sql VARCHAR(8000)
SET @sql = 'select TagName'
SELECT @sql = @sql + ',max(case ID when ' + CONVERT(VARCHAR, ID)
+ ' then ValueName end) [' + CONVERT(VARCHAR, ID) + ']'
FROM (SELECT DISTINCT ID FROM test) AS a
SELECT @sql = @sql + ' from test group by TagName'
EXEC(@sql)
/*
TagName 1 2
-------------------------------------------------- -------------------------------------------------- --------------------------------------------------
IC语言 English china
灯光 NULL 红色
服装 戏服 NULL
特殊商品 保护 其他
(4 行受影响)
*/
create table xy
(ID int,TagName varchar(10),ValueName varchar(10))
insert into xy
select 1,'IC语言','English' union all
select 1,'特殊商品','保护' union all
select 1,'服装','戏服' union all
select 2,'IC语言','china' union all
select 2,'特殊商品','其他' union all
select 2,'灯光','红色'
select a.TagName,
max(case when TagName=a.TagName and ID=1 then ValueName else null end) '1',
max(case when TagName=a.TagName and ID=2 then ValueName else null end) '2'
from xy a
group by a.TagName
/*
TagName 1 2
---------- ---------- ----------
IC语言 English china
灯光 NULL 红色
服装 戏服 NULL
特殊商品 保护 其他
(4 row(s) affected)
*/
if object_id('tempdb..#a') is not null drop table #a
create table #a
(
BigGoodsAUID varchar(10),
LabName varchar(50) ,
LabCode varchar(50)
)
insert into #a
select '4450880','产地区域','澄海' union all
select '4450880','IC语言','不分语种' union all
select '4450880 ',' 材质',NULL union all
select '4450880','包装语言' ,NULL union all
select '4450880','是否时货',NULL union all
select '4450880','特殊商品',NULL union all
select '4450880','灯光','带灯光' union all
select '4450880 ','声音','带声音' union all
select '4450880 ','尺寸','小型'
--select * from #a
declare @s nvarchar(4000)
Select @s=isnull(@s+',','')+quotename(BigGoodsAUID) from #a group by BigGoodsAUID
declare @sql varchar(200)
set @sql='select * from #a pivot (max(LabCode) for BigGoodsAUID in('+@s+'))b'
exec(@sql)
/*
LabName 4450880 4450880
-------------------------------------------------- -------------------------------------------------- --------------------------------------------------
材质 NULL NULL
IC语言 不分语种 NULL
包装语言 NULL NULL
产地区域 澄海 NULL
尺寸 NULL 小型
灯光 带灯光 NULL
声音 NULL 带声音
是否时货 NULL NULL
特殊商品 NULL NULL
*/
----------------------------------------------------------------
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-04-29 15:58:50
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([BigGoodsAUID] int,[LabName] nvarchar(8),[LabCode] nvarchar(10))
insert [huang]
select 4450880,N'产地区域',N'澄海' union all
select 4450880,N'IC语言',N'不分语种' union all
select 4450880,N'材质',null union all
select 4450880,N'包装语言',null union all
select 4450880,N'是否时货',null union all
select 4450880,N'特殊商品',null union all
select 4450880,N'适用年龄',null union all
select 4450880,N'灯光',N'带灯光' union all
select 4450880,N'声音',N'带声音' union all
select 4450880,N'尺寸',N'小型' union all
select 26430520,N'是否时货',N'非时货' union all
select 26430520,N'产地区域',N'澄海' union all
select 26430520,N'包装语言',N'英文包装' union all
select 26430520,N'IC语言',N'无IC' union all
select 26430520,N'特殊商品',N'非特殊商品' union all
select 26430520,N'适用年龄',N'3岁+' union all
select 26430520,N'材质',N'塑料' union all
select 26430520,N'灯光',N'不带灯光' union all
select 26430520,N'声音',N'不带声音' union all
select 28718938,N'IC语言',N'其它' union all
select 28718938,N'材质',N'EVA' union all
select 28718938,N'产地区域',N'澄海' union all
select 28718938,N'特殊商品',N'版权商品' union all
select 28718938,N'适用年龄',N'0-6个月' union all
select 28718938,N'是否时货',N'非时货' union all
select 28718938,N'包装语言',N'其它' union all
select 28718938,N'灯光',N'不带灯光' union all
select 28718938,N'声音',N'带声音' union all
select 28718938,N'尺寸',N'大型'
--------------生成数据--------------------------
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([BigGoodsAUID])+N'=max(case when [BigGoodsAUID]=N'+quotename(BigGoodsAUID,'''')+N' then [LabCode] else NULL end)'
from [huang] group by [BigGoodsAUID]
--SET @S=subSTRING(@S,2,LEN(@S))
exec('select [LabName]'+@s+' from [huang] GROUP BY [LabName]')
----------------结果----------------------------
/*
LabName 4450880 26430520 28718938
-------- ---------- ---------- ----------
IC语言 不分语种 无IC 其它
产地区域 澄海 澄海 澄海
包装语言 NULL 英文包装 其它
声音 带声音 不带声音 带声音
尺寸 小型 NULL 大型
是否时货 NULL 非时货 非时货
材质 NULL 塑料 EVA
灯光 带灯光 不带灯光 不带灯光
特殊商品 NULL 非特殊商品 版权商品
适用年龄 NULL 3岁+ 0-6个月
*/
ID TagName ValueName
1 IC语言 English
1 特殊商品 保护
1 服装 戏服
2 IC语言 china
2 特殊商品 其他
2 灯光 红色
得到下面这个结果
列名 1 2
IC语言 English china
特殊商品 保护 其他
服装 戏服 null
灯光 null 红色