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