id filedName sjName FieldValue file_id
1 年 year 2009 8d571fc
2 月 month 10 8d571fc
3 日 day 9 8d571fc
4 发行部门 fxbm 船体 8d571fc 我想用视图来写,实现year month day fxbm id
2009 10 9 船体 8d571fc
注意:FieldValue 里面的值 还有file_id 的 是会改变的
1 年 year 2009 8d571fc
2 月 month 10 8d571fc
3 日 day 9 8d571fc
4 发行部门 fxbm 船体 8d571fc 我想用视图来写,实现year month day fxbm id
2009 10 9 船体 8d571fc
注意:FieldValue 里面的值 还有file_id 的 是会改变的
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
create table [TB]([id] int,[filedName] varchar(8),[sjName] varchar(5),[FieldValue] varchar(4),[file_id] varchar(7))
insert [TB]
select 1,'年','year','2009','8d571fc' union all
select 2,'月','month','10','8d571fc' union all
select 3,'日','day','9','8d571fc' union all
select 4,'发行部门','fxbm','船体','8d571fc'select * from [TB]declare @s nvarchar(4000)
Select @s=isnull(@s+',','')+quotename([sjName])+'=max(case when [sjName]='+quotename([sjName],'''')+' then [FieldValue] else '''' end)'
from TB group by [sjName]
exec('select '+@s+' ,[file_id] from TB group by [file_id]')/*
day fxbm month year file_id
---- ---- ----- ---- -------
9 船体 10 2009 8d571fc(1 行受影响)
*/
drop table TB
id filedName sjName FieldValue file_id
1 年 year 2009 8d571fc
2 月 month 10 8d571fc
3 日 day 9 8d571fc
4 发行部门 fxbm 船体 8d571fc
是这样的,肯定是要用动态的来写,这个没有写过
-- Author : HappyFlyStone
-- Date : 2010-01-03 21:23:10
-- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)
-- Apr 14 2006 01:12:25
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
--
-------------------------------------------------------------------------- Test Data: ta
IF OBJECT_ID('[ta]') IS NOT NULL
DROP TABLE [ta]
Go
CREATE TABLE ta([id] INT,[filedName] NVARCHAR(4),[sjName] NVARCHAR(5),[FieldValue] varchar(10),[file_id] NVARCHAR(7))
Go
INSERT INTO ta
SELECT 1,'年','year','2009','8d571fc' UNION ALL
SELECT 2,'月','month','10','8d571fc' UNION ALL
SELECT 3,'日','day','9','8d571fc' UNION ALL
SELECT 4,'发行部门','fxbm','船体','8d571fc' UNION ALL
SELECT 1,'年','year','2009','8d571fd' UNION ALL
SELECT 2,'月','month','10','8d571fd' UNION ALL
SELECT 3,'日','day','9','8d571fd' UNION ALL
SELECT 4,'发行部门','fxbm','船体','8d571fd'
GO
--Start
SELECT
max(case when sjName = 'year' then [FieldValue] else '' end) as [year],
max(case when sjName = 'month' then [FieldValue] else '' end) as [month],
max(case when sjName = 'day' then [FieldValue] else '' end) as [day],
max(case when sjName = 'fxbm' then [FieldValue] else '' end) as [fxbm],
[file_id]
from ta
group by [file_id]
--Result:
/*year month day fxbm file_id
---------- ---------- ---------- ---------- -------
2009 10 9 船体 8d571fc
2009 10 9 船体 8d571fd(2 行受影响)*/
--End
fieldname 和sjName字段里面的只是不会变的,而FieldValue 和 FILE_ID 中的值是会改变的
至于你说的:而FieldValue 和 FILE_ID 中的值是会改变的,石头的语句就是针对这两个字段的值是变的.要不变才麻烦了.