Sql 如何显示多列数字数据的字符值

Sql 如何显示多列数字数据的字符值,sql,tsql,Sql,Tsql,这是一个建筑问题。 通常,当您有统计程序格式(R、SPSS)的数据时,每个值都有一个标签(称为值标签)。 假设我们有三个问题由三个人回答 Q1|Q2|Q3 Person1||2 |1 |1 Person2||3 |1 |2 Person3||3 |2 |3 每个值都有一个值标签 1 = good 2 = neutral 3 = bad 我的目标是将这些数据放入sql server。但我不知道如何做到这一点。我的想法是做两张桌子 第一个表格包含每个问题的每人答案。这里每

这是一个建筑问题。 通常,当您有统计程序格式(R、SPSS)的数据时,每个值都有一个标签(称为值标签)。 假设我们有三个问题由三个人回答

         Q1|Q2|Q3
Person1||2 |1 |1 
Person2||3 |1 |2 
Person3||3 |2 |3 
每个值都有一个值标签

1 = good
2 = neutral
3 = bad
我的目标是将这些数据放入sql server。但我不知道如何做到这一点。我的想法是做两张桌子

第一个表格包含每个问题的每人答案。这里每个人都有一个ID,问题是字段。现在我再做一次,把值和valuelabel放进去。但是使用这种构造,我不知道如何查询一个表,其中所有值都被valuelabels替换。我想我会问这样一个问题

Select * from Questions
left join labels
on questions.Q1 = labels.Labs
但对于1000个问题,我必须为每个问题添加最后一行?谁能帮我建造这张桌子,我不想犯建造错误

根据上述示例得出的结果如下所示:

         Q1      |Q2      |Q3
Person1||neutral |good    |good 
Person2||bad     |good    |neutral 
Person3||bad     |neutral |bad 

如果1、2和3总是好的、中性的和坏的,那么可以将它们存储在一种键/值对表中

    CREATE TABLE AnswerCodes(
        [AnswerValue] INT NOT NULL,
        [AnswerCode] VARCHAR(10) NOT NULL --can make the column wider to store bigger values
    )

    SELECT Q.AnswerValue, AC.AnswerCode
    FROM [Questions] Q
    JOIN [AnswerCodes] AC
        ON Q.[AnswerValue] = AC.[AnswerValue]
现在,当只拉动一列时,这将给您带来良好的结果。如果您确实需要将标签应用于多列答案值,您可以

  • 加入[AnswerCodes]中的所有值列,或
  • 使用数据透视表将每个人的结果转换为一行,以问题作为列

您能否详细说明数据来源?据我推测,您已经在单独的表中有了这些数字标识符和标签(好的,不太好的,等等),但是您想构建一个同时包含这两个的表吗?我将编辑我的问题以使其更清楚并回答您的问题。每个问题都需要自己的一组标签。因此,一个用于人员的表、问题标题、用于答案的问题代码框和一个用于结果的链接表。根据我的经验,如果市场调查数据是正常的,你最好不要试图使其正常化。我们通常有一个表格用于每次调查,另一个表格用于调查标签。谢谢您的回答。但这不是我拥有的吗?一个表用于调查(这将是我的第一个表),另一个表用于调查标签(这将是我的第二个表)。如果这是正常的方式,我显然走在了正确的道路上。但是如何查询表以获得我要查找的结果(见上文)?@ruedi No,您的结构不同(而且不是很好)。csmu向结果表暗示,结果表只有很少的链接字段-FK链接到问题、人物和答案。与您当前的Q1/Q2/Q3字段不同,它将包含三条记录。我正在寻找一种方法来避免这种情况,假设我有1000个问题,这将最终导致一个巨大的查询。但是非常感谢你的帮助!这一切都从你的问题数据设计开始。1000个问题等于1000个栏目。我只是回答上述问题。
Select * 
from Questions
left join labels as l1
on questions.Q1 = l1.Labs
left join labels as l2
on questions.Q2 = l2.Labs
left join labels as l3
on questions.Q3 = l3.Labs