我有一个庞大的物料清单,我的客户希望能够使用参数(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
我希望看到一个列表,我可以根据材料的大小过滤该列表,再加上另一个选择,其中所有内容在描述开始时都没有大小。
答案 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 + '%'
)