【问题标题】:SQL for each to join tables每个连接表的 SQL
【发布时间】:2013-06-11 02:25:11
【问题描述】:

我正在寻找一个临时表:

create table #FinalProduct
(
respondentId int,
respondentNumber nvarchar(7),
questionNumber int, 
questionAnswer nvarchar(100)
)

到目前为止,我已经填写了我想要的 respondentIds 和 respondentNumbers。然后我有另一个临时表,我从中提取问题数据:

CREATE TABLE #QuestionData
(
QuestionNumber int NOT NULL IDENTITY,
QuestionText nvarchar(255),
QuestionId int
)
insert into #QuestionData values ('This is question # 1', 101)
insert into #QuestionData values ('This is question # 2', 102)

我有一个答案表,我使用问题表中的 questionId 从中提取答案。

CREATE TABLE #AnswerData
(
    RespondentNumber nvarchar(7),
QuestionId int,
AnswerText nvarchar(255)
)

insert into #AnswerData values ('9876543',101, 'Answer to #1')
insert into #AnswerData values ('9876543',102, 'Answer to #2')
insert into #AnswerData values ('1234567',101, 'Answer to #1')
insert into #AnswerData values ('1234567',102, 'Answer to #2')

每个 respondentNumber 都会有一个问题的答案(并非所有答案都相同)。

我希望填写 FinalProduct 表,以便每个 respondentNumber 的每个问题和答案都有一行。例如,如果我有 2 个响应者编号,则最终表格应如下所示:

我不知道这是否意味着超级复杂,但我很难弄清楚。任何帮助是极大的赞赏。

提前致谢。 . .

【问题讨论】:

  • 你能显示 Answers 表的 CREATE 表的 SQL 吗?
  • 如何将 AnswerData 连接到受访者?
  • 是的,似乎缺少一个非常重要的表格,其中列出了受访者及其所做的答案。
  • 对不起,伙计们,试图尽可能简化这个问题,但惨遭失败。更新了我的问题。希望现在有意义

标签: sql sql-server-2008 join


【解决方案1】:

给定以下创建代码:

CREATE TABLE QuestionData
(
QuestionNumber int NOT NULL IDENTITY,
QuestionText nvarchar(255),
QuestionId int
)
insert into QuestionData values ('This is question # 1', 101)
insert into QuestionData values ('This is question # 2', 102)

CREATE TABLE AnswerData
(
    RespondentNumber nvarchar(7),
QuestionId int,
AnswerText nvarchar(255)
)

insert into AnswerData values ('9876543',101, 'Answer to #1')
insert into AnswerData values ('9876543',102, 'Answer to #2')
insert into AnswerData values ('1234567',101, 'Answer to #1')
insert into AnswerData values ('1234567',102, 'Answer to #2')

create table FinalProduct
(
respondentId int,
respondentNumber nvarchar(7),
questionNumber int, 
questionAnswer nvarchar(100)
)

查询:

INSERT INTO FinalProduct
SELECT NULL,a.RespondentNumber,q.QuestionNumber,a.AnswerText
FROM AnswerData a
JOIN QuestionData q
ON a.QuestionId=q.QuestionId
ORDER BY RespondentNumber,q.QuestionNumber

GO 
SELECT *
FROM FinalProduct

给予:

RESPONDENTID    RESPONDENTNUMBER    QUESTIONNUMBER  QUESTIONANSWER
(null)  1234567     1   Answer to #1
(null)  1234567     2   Answer to #2
(null)  9876543     1   Answer to #1
(null)  9876543     2   Answer to #2

Sqlfiddle:http://sqlfiddle.com/#!3/30592/3

【讨论】:

  • 感谢您的帮助!这就是我一直在寻找的。​​span>
【解决方案2】:

您似乎缺少数据元素,因为 respondentID 不在您的两个表之一中,但我认为您只是在这样的连接之后:

SELECT respondentNumber, questionNumber ,AnswerText 
FROM AnswerData a
JOIN QuestionData b
 ON a.QuestionId = b.QuestionId 

您可以将结果选择到新表中:

SELECT respondentNumber, questionNumber ,AnswerText 
INTO #FinalProduct
FROM AnswerData a
JOIN QuestionData b
 ON a.QuestionId = b.QuestionId 

或者您可以将它们插入到您现有的表中:

INSERT INTO #FinalProduct
SELECT respondentNumber, questionNumber ,AnswerText 
FROM AnswerData a
JOIN QuestionData b
 ON a.QuestionId = b.QuestionId 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 2016-07-23
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多