关于非规范化。如何使此查询更短或更好?(SQL SERVER 2000)

关于非规范化。如何使此查询更短或更好?(SQL SERVER 2000),sql,sql-server-2000,normalization,denormalization,Sql,Sql Server 2000,Normalization,Denormalization,您正在SQL中执行“透视”操作。没有比这更好的方法了,所以你不可能让它变得更好 也许你可以用table1.userID而不是userName来分组 问题是:你为什么需要这样的查询 如果要在客户机的视图中查询返回结果,则透视操作必须是视图的工作,而不是DAL的工作 我们需要更多的背景来回答你 您是否考虑过将其作为索引视图,而不是必须维护的新表?你认为非规范化表是哪种范式?这甚至不是答案。为什么投票赞成,谁删除了评论? INSERT INTO denormalizedTable SELECT ta

您正在SQL中执行“透视”操作。没有比这更好的方法了,所以你不可能让它变得更好

也许你可以用table1.userID而不是userName来分组

问题是:你为什么需要这样的查询

如果要在客户机的视图中查询返回结果,则透视操作必须是视图的工作,而不是DAL的工作


我们需要更多的背景来回答你

您是否考虑过将其作为索引视图,而不是必须维护的新表?你认为
非规范化表
是哪种范式?这甚至不是答案。为什么投票赞成,谁删除了评论?
INSERT INTO
denormalizedTable

SELECT
table1.userName,
MAX(CASE WHEN table2.Type = 1 THEN table2.Question END) AS question_1,
MAX(CASE WHEN table2.Type = 1 THEN table2.Answer END) AS answer_1,
MAX(CASE WHEN table2.Type = 2 THEN table2.Question END) AS question_2,
MAX(CASE WHEN table2.Type = 2 THEN table2.Answer END) AS answer_2,
MAX(CASE WHEN table2.Type = 3 THEN table2.Question END) AS question_3,
MAX(CASE WHEN table2.Type = 3 THEN table2.Answer END) AS answer_3,
MAX(CASE WHEN table2.Type = 4 THEN table2.Question END) AS question_4,
MAX(CASE WHEN table2.Type = 4 THEN table2.Answer END) AS answer_4,
MAX(CASE WHEN table2.Type = 5 THEN table2.Question END) AS question_5,
MAX(CASE WHEN table2.Type = 5 THEN table2.Answer END) AS answer_5,
MAX(CASE WHEN table2.Type = 6 THEN table2.Question END) AS question_6,
MAX(CASE WHEN table2.Type = 6 THEN table2.Answer END) AS answer_6,
MAX(CASE WHEN table2.Type = 7 THEN table2.Question END) AS question_7,
MAX(CASE WHEN table2.Type = 7 THEN table2.Answer END) AS answer_7,
MAX(CASE WHEN table2.Type = 8 THEN table2.Question END) AS question_8,
MAX(CASE WHEN table2.Type = 8 THEN table2.Answer END) AS answer_8

FROM
table1
JOIN
table2
ON
table1.userID = table2.userID 

GROUP BY table1.userName