SQL Server:获取与我的WHERE语句

时间:2017-04-26 03:39:48

标签: sql sql-server

可能很容易解决这个问题,但我看不到它。我没有对我的确切查询,但我尽可能地将其分解,并给出了我的最终SELECT语句的非常接近的示例以及我的结果的问题示例。 我正在尝试做什么: 我在查询中抓取了一些不同的文档,这没问题,因为我使用的是:

WHERE d.document IN ('Document 1', 'Document 2', 'Document 3', 'Document 4')

这很好用。它正在将这些文档拖到一个字段中,这正是我所需要的。

问题是我需要有关其中一份文件的具体信息。我需要知道文档4中是否使用了一个问题。如果是,我需要在单独的专栏中列出这些问题的答案。问题是一个表,答案是另一个表。

因此,我将所有其他数据(大多数未提及且与此问题无关)放入临时表中以提高性能。当我使用我的#finaltemp表到达最后的SELECT语句时,我正在尝试添加将为Document 4提供答案的字段。我正在做这样的事情:

SELECT DISTINCT
t.*,
CASE
     WHEN t.Question = 'question 17' THEN t.answer
     ELSE NULL
END AS "Doc5Ans"
FROM #temp t

所需的结果将包含我所有的基本数据字段,但它还有一个额外的字段,可以回答文档5中的问题。显然,所有其他文档都将收到NULL值在这个领域,这就是我想要的。

问题是:每当我有一个带有匹配的文档5(问题的答案)时,我将得到一个完整的行,其中包含我正在寻找的数据,但我也得到一个带有NULL的重复行价值(而不是答案)。因此,每次有一个带有Document 5答案的行时,会有另一行包含所有相同的信息,除了有问题的字段为NULL。

无论出于何种原因,每当我有匹配时,它会给我一行包含正确的数据和一行包含NULL。它总是被记录两次。我只想要其他没有或不需要的文档的NULL,并且这样可以正常工作,但为什么我为匹配的结果获得了额外的NULL行?

ID        Name.       DocName     Doc5Ans
321421    Person 1    DocOne       NULL
342611    Person 2    DocOne       NULL
373916    Person 3    DocThree     NULL
377625    Person 4    DocFive      Answer1
377625    Person 4    DocFive      NULL

最后两行是我正在谈论的一个例子。 它不应该为Person 4提供NULL .SQL以某种方式添加我的值,但是当Doc5Answer满足条件时,还会添加一行NULL。 这是怎么回事? 感谢您抽出宝贵时间阅读并提供帮助。

0 个答案:

没有答案