大小写、变量和一堆垃圾

Case, Variable, and a Bunch of Junk

我的客户希望能够使用参数 (SSRS) 按大小对这些材料进行排序。

我曾尝试使用 SSRS 进行过滤但没有成功,在我的 SQL 代码中也有几次失败的尝试。问题是有些材料很简单,例如“2" X 3/4" PVC SCH80 BUSHING SPIGOT X SOCKET',但其他材料更像是 'HOSE, DISCHARGE',其中我们将有一个 "Other" 将显示的类别。

我的代码的 case 部分是我出错的地方。是这样吗?我应该使用案例还是其他什么?我知道连接,第一个 WHERE 是正确的。重要的是要注意尺寸总是在描述的开头,它永远不会在名字的中间或其他任何地方,但字符数确实会有所不同,有时它会像 3/4" 或 2 " 等。最后的勾号 (") 也将始终位于末尾。

SELECT MATERIALLEAF.DESCRIPTION

FROM STORERMSTOCK

JOIN MATERIALLEAF ON MATERIALLEAF.MATERIALSID = STORERMSTOCK.MATERIALSID 
JOIN CWCUSTFIELD ON CWCUSTFIELD.TABLEOBJECTID = STORERMSTOCK.MATERIALSID

WHERE (CWCUSTFIELD.CUSTFIELDID = '5')  
    AND CASE@sizes
    WHEN'3/4"' THEN
        (SELECT MATERIALLEAF.DESCRIPTION 
            FROM STORERMSTOCK 
                WHERE MATERIALLEAF.DESCRIPTION LIKE'3/4"%') 
    ELSE
        @sizes
    END

我希望看到一个列表,我可以按材料的尺寸过滤,再加上另一个选择,其中包含描述开头没有尺寸的所有内容。

你做错了。您不能对 return 整个子查询使用 CASE 表达式。

看起来你想要的更像这样:

WHERE (
  @sizes='3/4"' AND  MATERIALLEAF.DESCRIPTION LIKE'3/4"%'
) OR 
... whatever you want to do if @sizes != '3/4"'.

嗯。 . .也许这就是你想要的?

WHERE CWCUSTFIELD.CUSTFIELDID = '5' AND
      (@sizes IS NULL OR
        MATERIALLEAF.DESCRIPTION LIKE @sizes + '%'
      )