【发布时间】:2021-11-16 22:00:33
【问题描述】:
我正在尝试从 6 列值中找出一个 ID(行)的最小值。我首先必须从具有字符串值(如“部分完成”)、空值、缺失字符串的表中进行查询,这些字符串我设置为与该步骤的序列(step1、step2、step3.step4、step5、step6)匹配的数值。否则我将其设置为零,并且在计算最小值时我不关心零。
所以我认为我可以使用 case 语句来计算最小值,但我并没有得到一致的结果。以下是我的代码,所以如果有更好的解决方案或我需要做的更改,请告诉我。先感谢您!抱歉我的格式不正确
Select pt.PROJECT_NUMBER, pt.STEP1, pt.STEP2, pt.STEP3, pt.STEP4, pt.STEP5, pt.STEP6,
CASE WHEN STEP1 = 'PARTIAL COMPLETE' OR STEP1 IS NULL OR STEP1 = '' THEN 1 ELSE 0 END AS step1_val,
CASE WHEN STEP2 = 'PARTIAL COMPLETE' OR STEP2 IS NULL OR STEP2 = '' THEN 2 ELSE 0 END AS step2_val,
CASE WHEN STEP3 = 'PARTIAL COMPLETE' OR STEP3 IS NULL OR STEP3 = '' THEN 3 ELSE 0 END AS step3_val,
CASE WHEN STEP4 = 'PARTIAL COMPLETE' OR STEP4 IS NULL OR STEP4 = '' THEN 4 ELSE 0 END AS step4_val,
CASE WHEN STEP5 = 'PARTIAL COMPLETE' OR STEP5 IS NULL OR STEP5 = '' THEN 5 ELSE 0 END AS step5_val,
CASE WHEN STEP6 = 'PARTIAL COMPLETE' OR STEP6 IS NULL OR STEP6 = '' THEN 6 ELSE 0 END AS step6_val
INTO #Temp
FROM
ProjectTracker.GIS.PROJECT_TRACKING pt
WHERE PROJECT_RECEIVED = 'YES' AND PROJECT_NUMBER = '5797'
SELECT * FROM #Temp
Select PROJECT_NUMBER,
Case When step1_val < step2_val And step1_val < step3_val And step1_val < step4_val And step1_val < step5_val And step1_val < step6_val Then step1_val
When step2_val < step1_val And step2_val < step3_val And step2_val < step4_val And step2_val < step5_val And step2_val < step6_val Then step2_val
When step3_val < step1_val And step3_val < step2_val And step3_val < step4_val And step3_val < step5_val And step3_val < step6_val Then step3_val
When step4_val < step1_val And step4_val < step2_val And step4_val < step3_val And step4_val < step5_val And step4_val < step6_val Then step4_val
When step5_val < step1_val And step5_val < step2_val And step5_val < step3_val And step5_val < step4_val And step5_val < step6_val Then step5_val
Else step6_val
End As TheMin
From #Temp
Drop Table #Temp
这会产生图像中的结果,显然预期的结果应该是 5 所以我不确定我哪里出错了
【问题讨论】:
-
这个桌子设计简直就是一场噩梦。如果你将来还有一步会发生什么?你必须重新设计所有。请仔细阅读这篇文章en.wikipedia.org/wiki/Database_normalization 并在为时已晚之前重新设计您的数据库;)
-
@Claus- 感谢您的客气话。我问了一个非常基本的问题,并希望得到一些帮助,而不是关于我在 sql 方面有多糟糕的讲座。不过谢谢你