我想创建一个查询,会给我一个表列数的,我在一列连接表在一个循环中
我最初的表看起来像这样不同值的数量:
tester_ID|trial|result
而且不是每个测试都必须有结果为每个审判
我想让这样的事情:
tester_ID|trial 1|trial 2|trial ....
的问题是我不知道如何使加盟循环 这将去了所有的测试,并导致在写每一个测试人员与他的结果行
我想创建一个查询,会给我一个表列数的,我在一列连接表在一个循环中
我最初的表看起来像这样不同值的数量:
tester_ID|trial|result
而且不是每个测试都必须有结果为每个审判
我想让这样的事情:
tester_ID|trial 1|trial 2|trial ....
的问题是我不知道如何使加盟循环 这将去了所有的测试,并导致在写每一个测试人员与他的结果行
希望这有助于你
create table tableA
(
tester_ID int,
trial int,
result varchar
);
insert into tableA values
(1, 10, 'P'),
(2, 12, 'q'),
(3, 13, 'w'),
(4, 14, 'e'),
(5, 15, 'h'),
静态版本,已经值硬编码为支点:
select *
from
(
select tester_ID ,
'Trail_' + cast(ROW_NUMBER() over(PARTITION by tester_ID order by tester_ID desc) as varchar(10)) col
from tableA
) x
pivot
(
max(value)
for col in ([Trail_1], [Trail_2], [Trail_3], [Trail_4],
[Trail_5])
) p
否则你必须去动版
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME('Trail_' + cast(x.rn as varchar(10)))
from tableA
cross apply
(
select ROW_NUMBER() over(PARTITION by tester_ID order by tester_ID desc) rn
from tableA
) x
group by x.rn
order by x.rn
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT id, ' + @cols + ' from
(
select tester_ID,
''Timeline_'' + cast(ROW_NUMBER() over(PARTITION by tester_ID order by tester_ID desc) as varchar(10)) col
from tableA
) x
pivot
(
max(value)
for col in (' + @cols + ')
) p '
execute(@query)
所以你知道pivoting ... –
@thedarksideofthemoon我希望如此 –
我认为你的问题是在'cast(ROW_NUMBER()(PARTITION由tester_ID order by tester_ID desc)':当我执行它时,我只是'Trial_1 '对于所有行 –
如果我理解正确的,你想是这样的:
SELECT r.tester_ID,CONCAT(r.Trail_1,r.Trail_2,r.Trail_3,r.Trail_4,r.Trail_5) AS trails
FROM (
SELECT *
FROM (
SELECT tester_ID ,
'Trail_' + CAST(DENSE_RANK() OVER(ORDER BY trial DESC) AS VARCHAR(10)) col
FROM tableA
) AS x
PIVOT
(
MAX(col)
FOR col IN ([Trail_1],[Trail_2],[Trail_3],[Trail_4],[Trail_5])
) AS p
) AS r
这是确定的,如果不能有一个有两条路线或试验的tester_ID
。
P.S.也许它可以被优化;)
谢谢,但问题是我不知道有多少试验有 –
我真的很难理解这个问题...... Information_Schema.Columns给你一个列表在数据库(与他们的表),你可以用它来动态建立你的查询? – Liath
请显示一些示例数据和预期结果。 – okrumnow
我上传的例子 –