所以我一直在尝试让它工作,当我阅读它时,它看起来非常简单和简单,但由于某种原因它不想处理简单的查询。我有一个相同的CASE语句处理具有多个表的不同报表,但是这个表不希望仅使用3个表。有一双新鲜眼睛的人可以看到我哪里出错吗?这几乎就像是在过滤结果而不是比较列。
SELECT dbo.Samples.BatchCode, dbo.SampRunTest.RunTstCode,
dbo.SampRunTest.RunCode, SampRunTest_1.RunTstCode AS ISO
FROM dbo.SampRunTest
INNER JOIN dbo.Samples
ON dbo.SampRunTest.RunSmpCode = dbo.Samples.SampleCode
INNER JOIN dbo.SampRunTest AS SampRunTest_1
ON dbo.SampRunTest.RunCode = SampRunTest_1.RunCode
AND dbo.SampRunTest.RunAuditFlag = SampRunTest_1.RunAuditFlag
WHERE (dbo.Samples.AuditFlag = 0)
AND (
dbo.SampRunTest.RunCode = CASE
WHEN (dbo.sampruntest.runtstcode) LIKE 'U%'
THEN 'U'
ELSE (sampruntest.runtstcode)
END
)
EDIT ---------------- 让我再试一次。所以我要做的是使用CASE语句根据查询中的另一列过滤我的列。例如,我有3个表我正在查询.... SamprunTest ...样本......和Sampleresults。 Sampleresults是我用来返回数据但需要在SamprunTest上过滤结果的主表。下面是我根据查询尝试从表中接收的数据示例。现在,上面列出的case语句不会返回任何内容。
Batchcode RunCode SampleCode RunTstCode ID Confidence
2014-236 14-13-15 C8787 AmTest NA
2014-236 14-13-15 C8787 PuTest NA
2014-236 14-13-15 C8787 GammaTest 0.9872
我知道这是一个粗略的陈述,但我很难解释事情。基本上我要做的是使用CASE语句(或其他一些方法)来过滤RunTstCode列上的ID Confidence列名。可能有助于提及“ID CONFIDENCE”列可以包含多个名称和值。这张表设置得非常奇怪。在这个例子中,我试图过滤“ID Confidence”表,当测试代码就像是gamma时,只筛选出名为“ID Confidence”的组件。
明文:
If runtstcode
like 'Gamma%'
then ID Confidence = 'ISO 1 ID Confidence'
ELSE "NA"
答案 0 :(得分:2)
在不知道您的架构或数据的情况下,这是一种调试查询的通用方法。
首先,在没有WHERE
子句的情况下首先运行查询。看看数据回来了。试试这个:
SELECT dbo.Samples.BatchCode, dbo.SampRunTest.RunTstCode, dbo.SampRunTest.RunCode, SampRunTest_1.RunTstCode AS ISO
FROM dbo.SampRunTest INNER JOIN
dbo.Samples ON dbo.SampRunTest.RunSmpCode = dbo.Samples.SampleCode INNER JOIN
dbo.SampRunTest AS SampRunTest_1 ON dbo.SampRunTest.RunCode = SampRunTest_1.RunCode AND
dbo.SampRunTest.RunAuditFlag = SampRunTest_1.RunAuditFlag
如果您没有获得任何数据,那么问题出在您的加入地点。开始删除联接并将其更改为SELECT *以查看您获得的内容。
如果您确实获得了数据,请在删除CASE部分的情况下再次运行数据:
SELECT dbo.Samples.BatchCode, dbo.SampRunTest.RunTstCode, dbo.SampRunTest.RunCode, SampRunTest_1.RunTstCode AS ISO
FROM dbo.SampRunTest INNER JOIN
dbo.Samples ON dbo.SampRunTest.RunSmpCode = dbo.Samples.SampleCode INNER JOIN
dbo.SampRunTest AS SampRunTest_1 ON dbo.SampRunTest.RunCode = SampRunTest_1.RunCode AND
dbo.SampRunTest.RunAuditFlag = SampRunTest_1.RunAuditFlag
WHERE (dbo.Samples.AuditFlag = 0)
如果可行,则问题出在CASE
。查看返回的数据应该有助于理解问题。
- 编辑 -
如果CASE是问题,那么尝试将CASE语句放在您的查询中,如下所示:
SELECT dbo.Samples.BatchCode, dbo.SampRunTest.RunTstCode, dbo.SampRunTest.RunCode, SampRunTest_1.RunTstCode AS ISO,
CASE WHEN (dbo.sampruntest.runtstcode) LIKE 'U%'
THEN 'U'
ELSE (sampruntest.runtstcode)
END AS [RunCodeShouldEqualThis],
CASE WHEN dbo.SampRunTest.RunCode =
CASE WHEN (dbo.sampruntest.runtstcode) LIKE 'U%'
THEN 'U'
ELSE (sampruntest.runtstcode)
END
THEN 'Equals'
ELSE 'Not Equals'
END AS [WhereClauseCaseStatementResult]
FROM dbo.SampRunTest INNER JOIN
dbo.Samples ON dbo.SampRunTest.RunSmpCode = dbo.Samples.SampleCode INNER JOIN
dbo.SampRunTest AS SampRunTest_1 ON dbo.SampRunTest.RunCode = SampRunTest_1.RunCode AND
dbo.SampRunTest.RunAuditFlag = SampRunTest_1.RunAuditFlag