大小写,变量和一堆垃圾

时间:2019-01-03 20:14:44

标签: sql sql-server reporting-services ssrs-2012

我有一个庞大的物料清单,我的客户希望能够使用参数(SSRS)按物料的大小进行排序。

我尝试使用SSRS进行过滤,但未成功,以及SQL代码中的几次失败尝试。问题在于,有些材料很简单,例如“ 2” X 3/4” PVC SCH80套管接头X袜子”,而其他材料更像是“软管,卸料”,我们将在其中添加“其他”类别。

我的代码的案例部分是我绊倒的地方。这样还对吗我应该使用保护套还是其他?我知道联接,第一个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

我希望看到一个列表,我可以根据材料的大小过滤该列表,再加上另一个选择,其中所有内容在描述开始时都没有大小。

2 个答案:

答案 0 :(得分:0)

您做错了。您不能使用CASE表达式返回整个子查询。

您想要的更像是这样:

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

答案 1 :(得分:0)

嗯。 。 。也许这就是您想要的?

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