在具有多个表的sql中进行透视

时间:2016-02-23 16:19:46

标签: sql sql-server database sql-server-2008 tsql

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,     
    )

上表中有3个表。这里第一个表只有一行用于特定表table1resultid。有一个外键关键船,第二个表即table2result。有一个table1resultid(从第一个表)将有多个记录。类似于table2和table3是相关的,依此类推。我的要求是为特定id显示1行。这是一个特殊的table1resulti我需要从所有表中获取数据并显示在一行。我希望列标题将作为我的result中的列标题。我用Google搜索它,发现我可以通过pivot获取它。我无法理解它。如果有人可以帮助我弄清楚它会让我的一天。

表1中的数据:

1 1-01-2015 5
2 1-08-2016 7

表2样本数据:

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

表3:

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

1 个答案:

答案 0 :(得分:0)

您可以使用连接来完成此操作,但是,单行或不依赖于您的条件(例如,对于同一个table1id,表2可能有2个表用于表1,在这种情况下,我们需要具有一些特定的条件)

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
相关问题