在SQL Server 2008中,我有以下表格:
CREATE TABLE samples (SampleID int, Time datetime, RawData image)
CREATE TABLE parameters (ParamID, SampleID int, ParamType uniqueidentifier, Value float)
在这种情况下,我的应用程序处理一个给定的样本(来自'samples'表)并提取几个不同的参数并将它们存储在'paremeters'表中。
我想创建一个临时表,其中每个参数(由特定的ParamType定义)都是一列,每行定义从每个给定样本中提取的每个参数的值。问题是结果列的数量和名称取决于'parameters'表的值。
如何做到这一点?
答案 0 :(得分:1)
我不确定你在问什么,但这应该接近你想要的:
DECLARE @columns VARCHAR(MAX)
SELECT @columns =
COALESCE(@columns + ',[' + CAST(p.ParamType as varchar(50)) + ']'
,'[' + CAST(p.ParamType as varchar(50)) + ']')
FROM
(
SELECT DISTINCT ParamType FROM parameters
) as p
DECLARE @query VARCHAR(MAX)
SET @query = '
SELECT * FROM
(
SELECT SampleID, ParamType, Value FROM parameters
) as tbl3
PIVOT
(
AVG(Value) FOR ParamType in (' + @columns + ')
) AS tblResults'
EXECUTE (@query)
Here它正在SEDE上运行。
答案 1 :(得分:0)
我认为您需要一个透视查询
试试这个:
select * from
(
select SampleID,Value,ParamType from parameters
) AS params
pivot (max(value) for ParamType in ([Type1],[Type2])) as Result