如何在where子句之后的子句之间提供多个值

时间:2016-10-15 18:50:19

标签: sql-server sql-server-2012

SELECT 
    ROW_NUMBER() OVER (ORDER BY Vendor_PrimaryInfo.Vendor_ID ASC) AS RowNumber, 
    *
FROM  
    Unit_Table 
INNER JOIN
    Vendor_Base_Price ON Unit_Table.Unit_ID = Vendor_Base_Price.Unit_ID 
INNER JOIN
    Vendor_PrimaryInfo ON Vendor_Base_Price.Vendor_ID = Vendor_PrimaryInfo.Vendor_ID 
INNER JOIN
    Vendor_Registration ON Vendor_Base_Price.Vendor_ID = Vendor_Registration.Vendor_ID 
                        AND Vendor_PrimaryInfo.Vendor_ID = Vendor_Registration.Vendor_ID 
INNER JOIN
    Category_Table ON Vendor_Registration.Category_ID = Category_Table.Category_ID
LEFT JOIN
    Vendor_Value_Table ON Vendor_Registration.Vendor_ID = Vendor_Value_Table.Vendor_ID 
LEFT JOIN
    Feature_Table ON Vendor_Value_Table.Feature_ID = Feature_Table.Feature_ID
WHERE
    Vendor_Registration.Category_ID = 5 
    AND Vendor_PrimaryInfo.City = 'City'
    AND (value_text in ('sample value') or 
         (SELECT 
              CASE WHEN ISNUMERIC(value_text) = 1 
                      THEN CAST(value_text AS INT)   
                      ELSE -1 
              END) BETWEEN 0 AND 100)

由于列具有多个值,这些值可能是文本,或者可能是int,这就是我根据案例进行转换的原因。我的问题是:我只想获取值介于0和100之间或值介于300到400之间的记录,或者值类似于样本值。

我只想在where子句之后放置条件,并且不希望在operator之间多次使用column_name,因为这些值来自url

在此先感谢任何帮助都会感激不尽。

1 个答案:

答案 0 :(得分:0)

你可以尝试这种方式..

WHERE
    Vendor_Registration.Category_ID = 5 
    AND Vendor_PrimaryInfo.City = 'City'
    AND (value_text in ('sample value') or 
         (CASE WHEN (ISNUMERIC(value_text) = 1)
                      THEN CAST(value_text AS INT)   
                      ELSE -1 
              END) BETWEEN 0 AND 100)