【发布时间】:2016-06-13 07:58:33
【问题描述】:
我有这样的结构。尝试创建动态表
create table indicator(id int not null,name varchar(255) not null)
insert indicator (id, name) values (1, 'basic employee details')
create table fields(
id int identity(1,1) not null,
type int,
name varchar(255) not null,
parentid int not null)
insert fields (id, type, name, parentid) values (1, 1, 'year', 0)
insert fields (id, type, name, parentid) values (2, 2, '2010', 1)
insert fields (id, type, name, parentid) values (5, 2, '2011', 1)
insert fields (id, type, name, parentid) values (6, 2, '2012', 1)
insert fields (id, type, name, parentid) values (7, 2, '2013', 1)
insert fields (id, type, name, parentid) values (8, 2, '2014', 1)
insert fields (id, type, name, parentid) values (9, 1, 'nationality', 0)
insert fields (id, type, name, parentid) values (10, 1, 'bahrani', 9)
insert fields (id, type, name, parentid) values (11, 1, 'non bahrani', 9)
insert fields (id, type, name, parentid) values (12, 1, 'gender', 0)
insert fields (id, type, name, parentid) values (13, 1, 'male', 12)
insert fields (id, type, name, parentid) values (14, 1, 'fe male', 12)
insert fields (id, type, name, parentid) values (15, 1, 'maritalstatus', 0)
insert fields (id, type, name, parentid) values (16, 1, 'married', 15)
insert fields (id, type, name, parentid) values (17, 1, 'unmarried', 15)
insert fields (id, type, name, parentid) values (18, 1, 'divorced', 15)
create table datafields(
dataid int not null,
fieldid int not null)
insert datafields (dataid, fieldid) values (1, 2)
insert datafields (dataid, fieldid) values (1, 10)
insert datafields (dataid, fieldid) values (1, 13)
insert datafields (dataid, fieldid) values (1, 16)
insert datafields (dataid, fieldid) values (2, 5)
insert datafields (dataid, fieldid) values (2, 11)
insert datafields (dataid, fieldid) values (2, 14)
insert datafields (dataid, fieldid) values (2, 17)
create table indicatorfields(
indicatorid int not null,
fieldid int not null)
insert indicatorfields (indicatorid, fieldid) values (1, 2)
insert indicatorfields (indicatorid, fieldid) values (1, 5)
insert indicatorfields (indicatorid, fieldid) values (1, 6)
insert indicatorfields (indicatorid, fieldid) values (1, 7)
insert indicatorfields (indicatorid, fieldid) values (1, 8)
insert indicatorfields (indicatorid, fieldid) values (1, 10)
insert indicatorfields (indicatorid, fieldid) values (1, 11)
insert indicatorfields (indicatorid, fieldid) values (1, 13)
insert indicatorfields (indicatorid, fieldid) values (1, 14)
insert indicatorfields (indicatorid, fieldid) values (1, 16)
insert indicatorfields (indicatorid, fieldid) values (1, 17)
insert indicatorfields (indicatorid, fieldid) values (1, 18)
create table indicatordata(
dataid int not null,
value varchar(255) not null,
indicatorid int not null)
insert indicatordata (dataid, value, indicatorid) values (1, '1015', 1)
insert indicatordata (dataid, value, indicatorid) values (2, '12', 1)
我得到了这样的输出
我正在尝试获取类似这样的数据
因为我正在尝试使用枢轴概念...
指导我生成类似这样的表
我试过了,没有得到预期的输出
DECLARE @query NVARCHAR(4000),@cols NVARCHAR(4000),@groupid varchar(50)
set @groupid='1'
SELECT @cols = COALESCE(@cols + ',[' + name + ']','[' + name + ']')
FROM Fields where parentid=0
--ORDER BY name
SET @query = N'SELECT id, '+@cols +'
FROM
(
select d.dataid as id,b.name,e.value FROm IndicatorFields a INNER JOIN fields b On a.fieldid=b.id INNER JOIN fields c ON c.id=b.parentid
INNER JOIN DataFields d ON a.fieldid=d.fieldid INNER JOIN IndicatorData e ON e.id=d.dataid
and a.indicatorid='+@groupid+') p
PIVOT
(
MAX([value])
FOR name IN
( '+@cols +' )
) AS pvt
ORDER BY id;'
print @query
EXECUTE(@query)
【问题讨论】:
-
感谢样本数据
-
感谢您尝试编辑 - 在下面的答案中添加了动态 SQL。
标签: c# sql sql-server-2008