如何创建一个新表,其中列基于其他表上的键?

时间:2011-12-06 16:31:26

标签: sql sql-server-2008

在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'表的值。

如何做到这一点?

2 个答案:

答案 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