我有這樣的結構。試圖創建動態表如何結合數據從行到列
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, '[email protected] +'
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='[email protected]+') p
PIVOT
(
MAX([value])
FOR name IN
('[email protected] +')
) AS pvt
ORDER BY id;'
print @query
EXECUTE(@query)
感謝樣本數據 – TheGameiswar
感謝你已經試過什麼編輯與SQL你 - 添加動態SQL到我下面的答案。 –