具有多个表的sql数据透视

具有多个表的sql数据透视,sql,sql-server,database,sql-server-2008,tsql,Sql,Sql Server,Database,Sql Server 2008,Tsql,以上表格为其中3个表格。在这里,第一个表只有一行用于特定的表1ResultId。第二个表即table2result有一个外键关联。对于table1resultid(来自第一个表),将有多个记录。同样,table2和table3是相关的,依此类推。我的要求是为一个特定id显示一行。也就是说,对于一个特定的表1,我需要从所有表中获取数据并显示在一行中。我希望列标题将作为我的结果中的列标题。我在谷歌上搜索了它,发现我可以通过pivot获得它。我想不明白。如果有人能帮我弄明白这会让我开心的 表1中的数据

以上表格为其中3个表格。在这里,第一个表只有一行用于特定的表1ResultId。第二个表即table2result有一个外键关联。对于table1resultid(来自第一个表),将有多个记录。同样,table2和table3是相关的,依此类推。我的要求是为一个特定id显示一行。也就是说,对于一个特定的表1,我需要从所有表中获取数据并显示在一行中。我希望列标题将作为我的结果中的列标题。我在谷歌上搜索了它,发现我可以通过pivot获得它。我想不明白。如果有人能帮我弄明白这会让我开心的

表1中的数据:

I have a requirement to show values from multiple tables to a single row . CREATE TABLE [dbo].[Table1Result](
    [Table1ResultID] [int] IDENTITY(1,1) NOT NULL,
    [CreateDate] [datetime] NOT NULL,
    [CreatedByUserID] [int] NOT NULL,
    )


CREATE TABLE [dbo].[Table2Result](
    [Table2ResultID] [int] IDENTITY(1,1) NOT NULL,
    [Table1Result] [int] NOT NULL,  --primary key of table1
    [Table2Name] [nvarchar](255) NULL,
    [Table2Overall] [bit] NOT NULL,
    [Table2GenterID] [int] NULL,
    [CombinedTable2Outcome] [bit] NULL,
    [Display] [bit] NOT NULL,
    [IsActive] [bit] NOT NULL,
    [HasOutcome] [bit] NOT NULL,
        )


CREATE TABLE [dbo].[Table3Result](
    [Table3ResultID] [int] IDENTITY(1,1) NOT NULL,
    [Table3ResultID] [int] NOT NULL, --primary key of table 2 ..here foreigh key
    [Table3Text] [nvarchar](max) NULL,
    [Table3Value] [int] NULL,
    [Table3StringValue] [nvarchar](max) NULL,
    [Table3BooleanValue] [bit] NULL,
    [Table3DateTimeValue] [datetime] NULL,
    [Table3DecimalValue] [decimal](18, 2) NULL,
    [Table3Dropdown] [bit] NULL,
    [Table3Validation] [bit] NOT NULL,
    [Table3DetailID] [int] NULL,
    [Table3QuestionID] [int] NOT NULL,
    [CombinedTable3Outcome] [bit] NOT NULL,     
    )
表2样本数据:

1 1-01-2015 5
2 1-08-2016 7
表3:

1   1   Heading FALSE   NULL    NULL    TRUE    TRUE    FALSE
2   1   ABC FALSE   5   TRUE    TRUE    TRUE    TRUE
3   1   XXX FALSE   5   TRUE    TRUE    TRUE    TRUE
4   1   KKK FALSE   FALSE   TRUE    TRUE    FALSE   TRUE
5   1   YYY FALSE   NULL    TRUE    TRUE    FALSE   TRUE
6   2   Heading FALSE   NULL    NULL    TRUE    TRUE    FALSE
7   2   ABC FALSE   5   TRUE    TRUE    TRUE    TRUE
8   2   XXX FALSE   5   TRUE    TRUE    TRUE    TRUE
9   2   KKK FALSE   NULL    TRUE    TRUE    FALSE   TRUE

您可以使用联接来实现这一点,但是,是否有一行取决于您的条件(例如,对于相同的table1id,表2可能有表1的两个条目,在这种情况下,我们需要一些特定的条件)


请更具体地说明您的标签,您不能同时拥有mysql和sql server,也不能同时拥有2005和2008。还包括一些示例数据和期望的结果,它们对理解问题有很大帮助。阅读,这里是一个学习如何提高问题质量和获得更好答案的好地方。你是对的,我可以使用联接从所有这些表中获取数据,这里我要求的风险是将最终结果排成一行。我试图得到的是类似于数据透视的东西。对于table1resultidok,我在表2中有多条记录,因此如果一个表有多行,那么这两行将并排出现(所有列将再次重复),而不是一行接一行?这就是你想要做的。是的…每一行都有一个特定的id。希望你知道excel中的pivot。我想达到同样的效果。注意:我不想要像ID一样的重复列。由于连接表,我可能会得到多行,这取决于数据。我想将所有行转置到一行。名称列将cme作为标题。
1   1   NULL    NULL    NULL    TRUE    NULL    NULL    FALSE   FALSE   NULL    1   FALSE
2   1   asdasd  NULL    1   NULL    NULL    NULL    FALSE   FALSE   NULL    2   FALSE
3   1   sda NULL    22  NULL    NULL    NULL    FALSE   FALSE   NULL    4   FALSE
4   1   asdasd  NULL    3   NULL    NULL    NULL    FALSE   FALSE   NULL    5   FALSE
5   1   NULL    NULL    4   NULL    NULL    NULL    FALSE   FALSE   NULL    9   FALSE
6   1   NULL    NULL    5   NULL    NULL    NULL    FALSE   FALSE   NULL    10  FALSE
7   1   sda NULL    NULL    NULL    NULL    NULL    TRUE    FALSE   NULL    11  FALSE
8   1   NULL    NULL    NULL    TRUE    NULL    NULL    FALSE   FALSE   NULL    12  FALSE
9   1   NULL    1   NULL    NULL    NULL    NULL    FALSE   FALSE   NULL    13  FALSE
10  2   asdasd  NULL    a   NULL    NULL    NULL    FALSE   FALSE   5   17  TRUE
11  2   asdasd  NULL    b   NULL    NULL    NULL    FALSE   FALSE   5   18  TRUE
        asdasd                                      
13  2   asdasd  NULL    d   NULL    NULL    NULL    FALSE   FALSE   5   20  TRUE
SELECT 
            T1.*
            ,T2.*
            ,T3.*
        FROM
            Table1Result T1
            JOIN Table2Result T2
            ON T1.TABLE1RESULTID = T2.TABLE1RESULT
            JOIN Table3Result T3
            ON T2.TABLE2RESULTID = T3.Table3Result -- this field was marked as table3resultid in the question instead of table3result
        WHERE
            T1.TABLE1RESULTID = 100-- the condition goes here