首页 > 解决方案 > 案例、变量和一堆垃圾

问题描述

我有一个巨大的材料清单,我的客户希望能够使用参数 (SSRS) 按尺寸对这些材料进行分类。

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

我的代码的案例部分是我绊倒的地方。这对吗?我应该使用案例还是其他东西?我知道连接和第一个 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

我希望看到一个可以按材料大小过滤的列表,以及另一个选择,其中包含在描述开头没有大小的所有内容。

标签: sqlsql-serverreporting-servicesssrs-2012

解决方案


你这样做是不对的。您不能使用 CASE 表达式返回整个子查询。

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

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

推荐阅读